R 使用存储在列表中的数据帧
有了这个问题,我想对开始的讨论进行扩展和概括。这是为了像我这样的人的利益,他们在不得不使用lapply时仍然处于困境 假设我有数据帧R 使用存储在列表中的数据帧,r,list,dataframe,lapply,R,List,Dataframe,Lapply,有了这个问题,我想对开始的讨论进行扩展和概括。这是为了像我这样的人的利益,他们在不得不使用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
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)
d1您很接近:lappy(my.ls,“[”,c(1,3))
。这将调用每个数据的索引函数[
。frame
带有附加参数c(1,3)
,指定第一列和第三列
同样,您可以调用lappy(my.ls,“[”,-2)
删除第二列
但是我建议使用更容易理解的lappy(my.ls,subset,select=c(1,3))
要直接从原始列表转到每个data.frame
的每列中值唯一的列表,可以使用嵌套的lappy
语句,如下所示:
lapply(my.ls, function(d) lapply(d[c(1,3)], unique))
您很接近:lappy(my.ls,“[”,c(1,3))
。这将调用每个数据的索引函数[
。frame
带有附加参数c(1,3)
,指定第一列和第三列
同样,您可以调用lappy(my.ls,“[”,-2)
删除第二列
但是我建议使用更容易理解的lappy(my.ls,subset,select=c(1,3))
要直接从原始列表转到每个data.frame
的每列中值唯一的列表,可以使用嵌套的lappy
语句,如下所示:
lapply(my.ls, function(d) lapply(d[c(1,3)], unique))
试试这个
lapply(my.ls, "[", ,c(1,3))
或者编辑一点您的代码会产生:
lapply(my.ls, function(x) x[, c(1,3)])
编辑
既然@Matthew Plourde已经用lappy
回答了你问题的第二部分,那么我给你一个替代方法,用rappy
来回答,这是lappy
的递归版本
rapply(lapply(my.ls, "[", ,c(1,3)), unique, how="list")
试试这个
lapply(my.ls, "[", ,c(1,3))
或者编辑一点您的代码会产生:
lapply(my.ls, function(x) x[, c(1,3)])
编辑
既然@Matthew Plourde已经用lappy
回答了你问题的第二部分,那么我给你一个替代方法,用rappy
来回答,这是lappy
的递归版本
rapply(lapply(my.ls, "[", ,c(1,3)), unique, how="list")
@马修·普劳德是的,非常快。谢谢!问题的第二部分呢?我能用拉普利解决吗?@马修·普劳德是的,非常快。谢谢!问题的第二部分呢?我能用拉普利解决吗?谢谢。你也能用拉普利解决问题的第二部分吗?答案很好。谢谢。谢谢。你愿意吗你也可以用lapply?很好的答案解决问题的第二部分。谢谢。