2014-03-12 35 views
0

我有數據幀的名單之內從一個數據幀的列調用(可以稱之爲「數據」),我已經產生,其是這樣的:數據幀

$"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

你也可以使用[[[調用data$"something.csv"$x[2]嘗試

data[[1]][2,1] 

其中[[1]]是第一個列表元素和[2,1]是該數據幀的參考元素

1

你試圖解決這個問題的辦法試圖從列表中找到一個'filename [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建議的基於數字的子集。