在列表中的多个数据帧上应用 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&lt;-list(mtcars=mtcars,iris=iris)

以上是关于在列表中的多个数据帧上应用 lapply,R的主要内容,如果未能解决你的问题,请参考以下文章

如何使用lapply来计算r中列表中的唯一值

使用 R 中的 lapply() 对列表中的所有帧执行数据帧计算 [重复]

使用 R 将多个数据帧写入 .csv 文件

如何在 R 中使用 lapply 消除异常

使用lapply或for循环将多个csv文件拉入自己的R数据帧

在每一行数据帧上调用类似应用的函数,每行有多个参数