我试图遍历长格式数据框中的几个变量,以便找出按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循环执行多个变量时,它告诉我每个人只有一个不同的值。
任何帮助将不胜感激,因为我已经花费了数小时试图使它起作用。
答案 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_all
或summarise_at