循环遍历变量以在R中按组查找不同的值

时间:2018-07-24 16:50:03

标签: r for-loop dplyr lapply

我试图遍历长格式数据框中的几个变量,以便找出按ID分组的每个变量的不同值的数量。

ID <- c(1, 1, 1, 2, 2, 3, 3)
diagnosis <- c(890, 890, 890, 451, 659, 760, 760)
df <- data.frame(ID, diagnosis)

我可以让它只使用一个变量:

d <- df %>% group_by(id) %>% mutate(distinct = n_distinct(diagnosis))

table(d$distinct)

但是当我使用lapply或for循环执行多个变量时,它告诉我每个人只有一个不同的值。

任何帮助将不胜感激,因为我已经花费了数小时试图使它起作用。

1 个答案:

答案 0 :(得分:2)

我们可以使用mutate_all来包含除分组列之外的所有其他列

library(dplyr)
df %>% 
    group_by(id) %>%
    mutate_all(funs(distinct = n_distinct(.)))

对于选定的列,请使用mutate_at

df %>%
   group_by(id) %>%
   mutate_at(vars(colsofInterest), funs(distinct = n_distinct(.)))

以上内容在原始数​​据集中创建了新列。如果要获取摘要输出,请使用summarise_allsummarise_at