在列表中的多个数据帧上应用 lapply,R
Posted
技术标签:
【中文标题】在列表中的多个数据帧上应用 lapply,R【英文标题】:Applying lapply on Multiple Data Frames in a List, R 【发布时间】:2013-10-15 11:17:33 【问题描述】:我在列表 u 中有一个相似数据帧的列表(4 列,所有列都具有相同的标题),并且想运行一个 lapply 函数来获取每个数据帧的第 2 列和第 3 列的相关性。我希望函数读取任何整数 i (列表有 300+ csvs)。
我试过这段代码,但没有成功:
i<-1:2
for (i) lapply(u, cor(u[[i]][,2],u[[i]][,3]))
有人可以帮我修复此代码吗?对这个程序来说还是相当新的。
编辑:我尝试了下面的 Metrics 代码并且它有效,不幸的是其中一个 csvs 只包含标题而没有数据。我收到此错误: cor(u[, 2], u[, 3]) 中的错误:'x' 为空
如果没有任何可用数据,是否可以修改 sapply 以便“cor”函数返回 0?
【问题讨论】:
仅供参考:上面示例中的i
不是迭代器,只是数字的 vecotr(“列表”)。你需要一些东西来迭代它们。例如:for (j in i)
或只是 for (j in 1:2)
或 for (i in 1:2)
【参考方案1】:
x 包含所有数据帧的列表。在以下示例中,我使用了 R 中的两个数据帧。(mtcars 和 iris)
list(mtcars=mtcars,iris=iris)
lapply(x,function(x)cor(x[,2],x[,3]))
[[1]]
[1] 0.9020329
[[2]]
[1] -0.4284401
或者,如果你想要矢量输出:
sapply(x,function(x)cor(x[,2],x[,3]))
[1] 0.9020329 -0.4284401
【讨论】:
如果你给你的列表元素命名,结果会更易读:x<-list(mtcars=mtcars,iris=iris)
以上是关于在列表中的多个数据帧上应用 lapply,R的主要内容,如果未能解决你的问题,请参考以下文章
使用 R 中的 lapply() 对列表中的所有帧执行数据帧计算 [重复]