使用R中的[[]]索引访问多个数据源

时间:2014-10-09 00:08:24

标签: r indexing

这是我的代码:

file.number <- c(1:29)
data <- setNames(lapply(paste0(file.number, ".csv"), read.csv), paste0(file.number, ".data"))
n <- c(1:3,10:15,21:26)
sw <- na.omit(data[[n]]$RT[data[[n]]$rep.sw=="sw"])
rep <-na.omit(data[[n]]$RT[data[[n]]$rep.sw=="rep"])

问题是第3行 - 如果n = 1,它可以工作,但如果我包含多个数字,我会收到错误“递归索引失败”。有没有办法可以一次访问多个索引?

谢谢R社区!任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

评论太长了。

看起来data是数据框列表。列表元素被命名,例如1.data2.data等,每个数据框都包含名为RTrep.sw的列。所以,像这样:

## representative example???
df   <- data.frame(RT=1:100,rep.sw=sample(c("sw","rep"),100,replace=TRUE))
data <- setNames(lapply(1:29,function(i)df),paste0(1:29,".data"))

您似乎想要从NA(或RT)行的每个数据框的res.sw=="sw"列中删除"rep"

如果这是正确的,那么这样的事情应该有效:

sw  <- lapply(data[n],function(df) with(df,na.omit(RT[rep.sw=="sw"])))
rep <- lapply(data[n],function(df) with(df,na.omit(RT[rep.sw=="rep"])))

此代码会将n中标识的数据框一次一个地传递给函数,并为每个数据框返回RTrep.sw="sw"的行{ {1}}被省略。结果将是一个向量列表。

我注意到大多数列都是作为因素导入的,这可能是一个坏主意。您可能希望使用以下方式导入:

NA