有了这个问题,我想扩展并概括讨论开始here . 这是为了那些像我一样,在必须使用lapply时仍然遇到麻烦的人的利益 .
假设我有数据框 d1
和 d2
,我存储在列表 my.ls
d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA), c=letters[1:5])
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007), c=letters[6:10])
my.ls<-list(d1=d1, d2=d2)
如何获得另一个具有相同数据框的列表,我只保留第一列和第三列?我尝试了以下,但它没有用
my.ls.sub<-lapply(my.ls, my.ls[,c(1,3)])
如果那样的话,我不仅想要对数据帧进行子集化,而且我还想知道我正在提取的列中的 unique
值是什么? (换句话说,在这里,我将为每个数据帧创建两个向量,这些向量可以是空闲的或存储在列表列表中) . 对于后一点,我无法提出任何建议......
2 回答
试试这个
或者编辑一下你的代码产生:
编辑
既然@Matthew Plourde已经使用
lapply
回答了你问题的第二部分,那么我给你另一种方法来使用rapply
这是lapply
的递归版本 .你很亲密:
lapply(my.ls, '[', c(1,3))
. 这将使用附加参数c(1,3)
在每个data.frame
上调用索引函数[
,指定第一列和第三列 .同样,您可以调用
lapply(my.ls, '[', -2)
删除第二列 .但我会建议更清晰的
lapply(my.ls, subset, select=c(1,3))
.要直接从原始列表转到每个
data.frame
的每列中唯一值的列表,您可以使用嵌套的lapply
语句,如下所示: