Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用存储在列表中的数据帧_R_List_Dataframe_Lapply - Fatal编程技术网

R 使用存储在列表中的数据帧

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

有了这个问题,我想对开始的讨论进行扩展和概括。这是为了像我这样的人的利益,他们在不得不使用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)

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?很好的答案解决问题的第二部分。谢谢。