我有一個數據框有幾列。行有名字。關於操作數據幀的基本R問題
我想爲每一行計算一些值(col1/col2
)並用原始行名創建一個新的數據框。如果我只是做類似data$col1/data$col2
的東西,我會得到一個結果向量,但是會丟失行名。
我知道這是很基本的,但我是很新的R.
我有一個數據框有幾列。行有名字。關於操作數據幀的基本R問題
我想爲每一行計算一些值(col1/col2
)並用原始行名創建一個新的數據框。如果我只是做類似data$col1/data$col2
的東西,我會得到一個結果向量,但是會丟失行名。
我知道這是很基本的,但我是很新的R.
這將有助於閱讀?"[.data.frame"
明白髮生了什麼事情。具體做法是:
注意,沒有「data.frame」爲「$」 方法,因此「X $名稱」使用這把「X」作爲 列表 默認方法。
你會看到,當你轉換一個data.frame到列表中的對象的名稱丟失(使用里斯示例數據):
> as.list(Data)
$col1
[1] -0.2179939 -2.6050843 1.6980104 -0.9712305 1.6953474 0.4422874
[7] -0.5012775 0.1.0453705 -0.2883248
$col2
[1] -1.3623349 0.4535634 0.3502413 -0.1521901 -0.1032828 -0.9296857
[7] 1.4608866 1.1377755 0.2424622 -0.7814709
我的建議是,以避免如果您使用$
想保留行名稱。使用這個來代替:
> Data["col1"]/Data["col2"]
col1
a 0.1600149
b -5.7435947
c 4.8481157
d 6.3816918
e -16.4146120
f -0.4757387
g -0.3431324
h 0.1822161
i 4.3114785
j 0.3689514
使用函數名()來添加名字:
Data <- data.frame(col1=rnorm(10),col2=rnorm(10),row.names=letters[1:10])
x <- Data$col1/Data$col2
names(x) <- row.names(Data)
該解決方案提供與名稱的載體。爲了得到一個數據幀(從Marek溶液):
NewFrame <- data.frame(x=Data$col1/Data$col2,row.names=row.names(Data))
你錯過了'data.frame'關鍵字。 – Marek 2010-09-01 10:02:07
@Marek:thx。我需要更多的咖啡... – 2010-09-01 10:13:03
一個非常簡潔明快的辦法是使用row.names(數據幀),保存爲一列,並進一步操縱
Josh,[「姓名」]而不是$姓名的優勢是什麼?我傾向於使用後者,我發現你更喜歡前者。我的偏好只來自習慣,沒有意識的決定。 – 2010-09-01 15:03:02
@JD我其實不喜歡前者。我經常使用'$'和'$ < - ',但我不關心行名......這是使用'[.data.frame'(它不會刪除行名稱)的優點。 – 2010-09-01 15:15:32
呵呵,你在回答中說'行名',但不知怎麼它沒有註冊在我的頭上。是的,我現在看到了。對不起,這麼密集;) – 2010-09-02 15:41:52