r - 对存储在字符向量中的每个数据帧名称应用函数
问题描述
我的环境中有数据框,并且我已将相同的名称存储在字符向量中。
ldf <- names(which(unlist(eapply(.GlobalEnv,is.data.frame))))
当我打印 ldf 时,它的结构类似于:
>ldf
[1] "tdf1" "tdf2"
[3] "tdf3"
我想从每个数据帧中删除具有许多 na 的行。我创建了一个函数,如下所示:
remna <- function(df) {
df$countofna <- apply(df[,c(1:length(df))], 1,function(x) sum(is.na(x)))
df <- df[df$countofna <=3, ]
df$countofna <- NULL
df <- df[1:nrow(df)-1, ]
}
我如何remna
在每个名称存储在ldf
. 不使用ldf
,我尝试使用 for 循环:
for (i in names(which(unlist(eapply(.GlobalEnv,is.data.frame))))) {
remna(i)
}
但是,这在执行 remna 时失败,并出现以下错误:
Error in df[, c(1:length(df))] : incorrect number of dimensions
该函数remna
在单个数据帧上完美运行。
解决方案
一种选择是将数据集加载到list
with 中mget
并用于rowSums
创建一个逻辑向量,用于保留/删除每个数据集中的行
out <- lapply(mget(ldf), function(dat) dat[rowSums(is.na(dat)) <= 3,, drop = FALSE])
如果需要更新原始对象,则使用list2env
(虽然不推荐)
list2env(out, .GlobalEnv)
推荐阅读
- rust - 如何将带有“Z”后缀的 str 转换为 dateTime 结构?
- java - 如何检查一个字符是否在java中的字符串或数字中
- php - PHP 将所有异常归为一个
- ios - 启动屏幕中的 PDF 矢量图像,在设备上无法正确缩放
- javascript - 使用 d3.js 根据我的 xAxis 文本调整图表大小
- django - 将变量共享到 django 中包含的模板
- google-cloud-platform - Argo 与多个 GCP 项目
- python - 从蓝图部署的排队后台工作线程中缺少 Flask 应用程序上下文
- r - 如何仅从某些列在 R 中创建分组条形图?
- excel - 为什么我的 Range 变量出现 Object Required 错误