从数据帧内的数据帧调用列

时间:2014-03-12 06:29:49

标签: r

我有一个我生成的数据框列表(让我们称之为“数据”),如下所示:

$"something.csv"
   x  y  z
1  1  1  1
2  2  2  2
3  3  3  3

$"something else.csv"
   x  y  z
1  1  1  1
2  2  2  2
3  3  3  3

我想从表格“something.csv”中输出x列中的一个数字。

到目前为止,我已经使用过:

data$"something.csv"$x[2]

这个编码工作正常,我很高兴,但我的问题是我想自动化这个过程,所以我把所有表标题放到一个列表(文件名)中:

[1] "something.csv", "something else.csv"

所以我做了一个for循环,这应该允许我这样做但是当我输入时:

data$filename[1]$x[2]

它让我回归NULL。

当我打印filename[1]时,我会[1] "something.csv",如果我输入

data$"something.csv"$x[2]

我得到了我想要的结果。所以,如果filename[1] = "something.csv",为什么它不会给我相同的结果?

我只是希望我的代码输出第x列的第二行并在for循环中使用filename[i]进行自动化。

2 个答案:

答案 0 :(得分:1)

您尝试解决问题的方法是尝试查找列'文件名[1]'从列表中,但没有找到。因此,返回NULL。

您需要使用方括号,并对对象数据进行子集化。这是一个例子:

# Generate data
data<-vector("list", 2)
names(data)<-c("something.csv", "something else.csv")
data[[1]]<-data.frame(x=1:3, y=1:3, z=1:3)
data[[2]]<-data.frame(x=1:3, y=1:3, z=1:3)
filename<-names(l)

# Subset the data
# The first data frame, notice the square brackets for subsetting lists!
data[[filename[1]]]
# column x
data[[filename[1]]]$x
# Second observation of x
data[[filename[1]]]$x[2]

以上用于对列表中对象的名称进行子集化。您还可以使用@Jeremy建议的基于数字的子集。

答案 1 :(得分:0)

您也可以使用[[[来致电data$"something.csv"$x[2]试试

data[[1]][2,1]

其中[[1]]是第一个列表元素,[2,1]是数据框引用元素