我有一个我生成的数据框列表(让我们称之为“数据”),如下所示:
$"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]
进行自动化。
答案 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]
是数据框引用元素