我有一個看起來像一個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
我有一個看起來像一個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
讓我們嘗試各種柱替代,看看會發生什麼:
> 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
謝謝。這是一個非常好的答案。很高興知道我不是瘋了。 – Henry
'DF [ , 'y']'用逗號? –
da da。非常感謝。 – Henry
對不起,我的原始代碼有錯誤。固定 – Henry