r-在tibble的列中循环管道



我有一个包含20个变量的tibble。到目前为止,我一直在使用这个管道来找出哪些值在单列中出现不止一次

as_tibble(iris) %>% group_by(Petal.Length) %>% summarise(n=sum(n())) %>% filter(n>1)

我想知道我是否可以写一行,在所有列中循环,并以上面的管道返回一个tibble的方式返回20个不同的tibble(或将来需要的数量(。我试着写自己的循环,但没有成功,我还是个新手。

iris示例数据集有5列,因此可以随意给出5列的答案。

谢谢!

library(dplyr)
col_names <- colnames(iris)
lapply(
col_names,
function(col) {
iris %>%
group_by_at(col) %>%
summarise(n = n()) %>% 
filter(n > 1)
}
)

在基数R 4.1+中,我们有一个线性。对于每一列,它应用表,然后过滤掉那些值超过1的元素。最后,它将表的剩余部分转换为数据帧。如果可以返回表对象列表而不是数据帧列表,则省略堆栈。

lapply(iris, (x) stack(Filter(function(x) x > 1, table(x))))

这种方法的一个变体是只保留重复的项目,然后添加1,从而减少击键次数。同样,如果返回一个表对象列表是可以的,我们可以省略堆栈

lapply(iris, (x) stack(table(x[duplicated(x)]) + 1))

最新更新