2015-10-14 37 views
0

我有一個看起來像一個R數據幀:應用數據幀進行邏輯檢查重命名

x<-c(1:10) 
df<-data.frame(x) 
df['y']<-(df['x']>5) 

這應該給我false x5, true x5

但是,當我這樣做時,它將df['y']重命名爲x

如何在不重新命名原始列標題的情況下進行我想要的評估?

感謝

當我這樣做,我得到下面的輸出:

x x 
1 1 FALSE 
2 2 FALSE 
... 
10 10 TRUE 
+2

'DF [ , 'y']'用逗號? –

+0

da da。非常感謝。 – Henry

+0

對不起,我的原始代碼有錯誤。固定 – Henry

回答

2

讓我們嘗試各種柱替代,看看會發生什麼:

> x<-c(1:4) ; df<-data.frame(x) ; 
> df 
    x 
1 1 
2 2 
3 3 
4 4 

這是我怎麼會做它 - 從另一列創建一個新列:

> df$y=df$x>2 
> df 
    x  y 
1 1 FALSE 
2 2 FALSE 
3 3 TRUE 
4 4 TRUE 

第2版,獲得分配的方式,用單括號:

> x<-c(1:4) ; df<-data.frame(x) ; 
> df['y']=df$x>2 
> df 
    x  y 
1 1 FALSE 
2 2 FALSE 
3 3 TRUE 
4 4 TRUE 

,看起來不錯,一個x和y欄。現在檢查我們得到你的行爲:

> x<-c(1:4) ; df<-data.frame(x) ; 
> df['y']=df['x']>2 
> df 
    x  x 
1 1 FALSE 
2 2 FALSE 
3 3 TRUE 
4 4 TRUE 

是的,兩個x列。現在讓我們從2開始嘗試。

> x<-c(1:4) ; df<-data.frame(x) ; 
> df$y=df['x']>2 
> df 
    x  x 
1 1 FALSE 
2 2 FALSE 
3 3 TRUE 
4 4 TRUE 

再次兩個x列。所以看起來RHS觸發了這一點。

的解決方案是括號:

> df['x'] 
    x 
1 1 
2 2 
3 3 
4 4 
> df[['x']] 
[1] 1 2 3 4 

單方括號讓你的數據幀,並分配從另一個數據框中一個數據幀的一部分,似乎覆蓋了名。使用雙括號只是獲取列值,並且這樣的名字不會改變:

> x<-c(1:4) ; df<-data.frame(x) ; 
> df['y']=df[['x']]>2 
> df 
    x  y 
1 1 FALSE 
2 2 FALSE 
3 3 TRUE 
4 4 TRUE 

當然,如果你知道該文本名稱,你應該使用df$y,只能從一個變量評估名稱時使用雙括號例如:

> n="y" 
> df[[n]] 
[1] FALSE FALSE TRUE TRUE 

原因的額外的逗號修正,這是因爲索引與兩個索引讓你的載體,一個索引(單一方括號中)讓你的數據幀:

> df[,'x'] 
[1] 1 2 3 4 
> df['x'] 
    x 
1 1 
2 2 
3 3 
4 4 
+0

謝謝。這是一個非常好的答案。很高興知道我不是瘋了。 – Henry