首页 > 解决方案 > 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()
}

关于如何让这个也过滤的任何想法?

标签: rfor-loop

解决方案


我能够通过更多研究找到解决方案,尽管它不涉及 for 循环。我创建了一个自定义函数,然后使用了 lapply。如果有人想知道,这是我的解决方案。

my_fn <- function(column){
tmp <- df %>% select(column)
tmp %>% filter(!is.na(.data[[column]]) & .data[[column]] != “# - #”)
}

lapply(col_notes, my_fn)

感谢您的考虑。


推荐阅读