关于操纵数据帧的基本R问题

时间:2010-09-01 07:49:13

标签: r dataframe

我有一个包含多个列的数据框。行有名字。

我想为每一行(col1/col2)计算一些值,并使用原始行名创建一个新的数据框。如果我只是执行data$col1/data$col2之类的操作,我会得到一个包含结果的向量,但会丢失行名称。

我知道这是非常基本但我对R很新。

3 个答案:

答案 0 :(得分:4)

阅读?"[.data.frame"以了解正在发生的事情会有所帮助。具体做法是:

  

请注意,没有'data.frame'   '$'的方法,所以'x $ name'使用   将'x'视为a的默认方法   列表。

如果将data.frame转换为列表(使用Joris的示例数据),您将看到对象的名称丢失:

> as.list(Data)
$col1
 [1] -0.2179939 -2.6050843  1.6980104 -0.9712305  1.6953474  0.4422874
 [7] -0.5012775  0.2073210  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

答案 1 :(得分:2)

使用函数names()添加名称:

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))

答案 2 :(得分:-1)

一种非常简单明了的方法是使用row.names(数据框)将其存储为列并进一步操作