r - R for循环过滤和打印数据框的列
问题描述
向我提出的类似问题似乎并不完全适用于我要完成的工作,并且在最相似的问题之一中提供的答案中至少有一个没有正确提供实际有效的解决方案。
所以我有一个数据框,可以说类似于以下内容。
sn <- 1:6
pn <- letters[1:6]
issue1_note <- c(“issue”,”# - #”,NA,”sue”,”# - #”,”ISSUE”)
issue2_note <- c(“# - #”,”ISS”,”# - #”,NA,”Issue”,”Tissue”)
df <- data.frame(sn,pn,issue1_note,issue2_note)
这就是我想要做的。我希望能够快速轻松地直观地检查每个 _note 列。我知道我可以通过使用select()
和filter()
在每一列上执行此操作
df %>% select(issue1_note) %>%
filter(!is.na(issue1_note) & issue1_note != “# - #”)
但是,我的真实数据中有大约 30 列和 300 行,并且不想每次都这样做。
我想编写一个 for 循环,它将在所有列中执行此操作。我还希望单独打印每一列。我尝试以下方法仅删除 NA,但它仅选择并打印列。就好像它完全跳过了过滤。
col_notes <- df %>% select(ends_with(“note”)) %>% colnames()
for(col in col_notes){
df %>% select(col) %>% filter(!is.na(col)) %>% print()
}
关于如何让这个也过滤的任何想法?
解决方案
我能够通过更多研究找到解决方案,尽管它不涉及 for 循环。我创建了一个自定义函数,然后使用了 lapply。如果有人想知道,这是我的解决方案。
my_fn <- function(column){
tmp <- df %>% select(column)
tmp %>% filter(!is.na(.data[[column]]) & .data[[column]] != “# - #”)
}
lapply(col_notes, my_fn)
感谢您的考虑。
推荐阅读
- angular - 为什么 Angular 错误句柄不会从服务中抛出错误
- postgresql - 使用 LEFT JOIN 和子查询提高 PostgreSQL 查询的性能
- excel - 多数据验证Excel
- python - boto3 定价为相同类型的实例返回多个值
- r - 在 R Markdown 投影仪演示文稿中更改背景
- sql - 返回执行 SQL 任务的单行单值结果集作为 SSIS 中另一个执行 SQL 任务的输入
- postgresql - 聚合中的弹性搜索排序不起作用
- javascript - 是否可以在一列中更改 chartjs 行值?无过渡
- python - 如何在 Docker Container 中安装一些 python 包
- angular - ngbdropdownMenu 与 ngfor - 修复顶部位置