r - 删除多个数据框中的行
问题描述
我有大量的 DF。我想对所有 DF 进行更改,但无法弄清楚。
我想删除 Class = Poor 的行,并保留所有其他行。
DF1:
Name Class Weight Jan_income Feb_income
John Rich 92 10000 45454
Sam Poor 23 100 4552
Laura Poor 45 123 7542
DF2:
Name Class Weight Jan_income Feb_income
Mark Poor 23 1031 5434
Sam Middle 23 100 951
Laura Poor 45 123 421
我可以为一个 DF 做到这一点
DF1 <- DF1 [!(DF1$Class == "Poor"),]
我很高兴保留现有的 DF 名称。任何帮助表示赞赏。
解决方案
一种选择是将其放在list
. 如果名称有pattern
,则使用mget
withls
lst1 <- lapply(mget(ls(pattern = "^DF\\d+$")), subset, Class != "Poor")
如果数据集具有相同的列名,则
out <- do.call(rbind, lst1)
或使用与 OP 相同的代码,使用匿名函数调用
lapply(mget(ls(pattern = "^DF\\d+$")), function(x) x[[!(x$Class == "Poor"),])
或者另一个选项map
来自purrr
library(purrr)
library(dplyr)
out1 <- map_dfr(mget(ls(pattern = "^DF\\d+$")), ~ .x %>%
filter(Class != "Poor"))
如果打算有一个单一的data.frame,最好不要在全局环境中创建多个对象,即如果我们从文件中读取数据集,list
直接将其读取到a并将行子集化
library(readr)
map_dfr(files, read_csv, .id = 'grp') %>%
filter(Class != "Poor")
或在base R
out2 <- do.call(rbind, Map(cbind, grp = seq_along(files), lapply(files, read.csv)))
subset(out2, Class != "Poor")
推荐阅读
- java - 尽管使用了请求包装器,但 Spring 表单输入值在过滤器中读取一次后返回 null
- spring-boot - 在 maven 中使用 jgitver 和本地 repo 时 spring-boot-dependency 版本无效
- c# - 无法继承构造函数,需要对象引用
- windows - 在 Windows 服务中打开的对话框窗口
- javascript - 为什么我们不能在一个库中拥有一个包含 React 和 React-DOM 库的库?
- c - 从 .raw 图像文件格式读取二进制数据
- android - 如何在 Android 设备上运行带有 Node js 后端的 React Native 应用程序?
- r - FriedmanTestBMR 使用一个多任务分类器 - mlr
- doctrine-orm - 覆盖供应商库中的 Doctrine 实体类以删除实体属性
- asp.net-core - ASP .Net Core 3.1 使用自定义名称构建到客户文件夹而不是 netcoreapp3.1