【问题标题】:Looping over variables to find distinct values by group in R循环变量以在 R 中按组查找不同的值
【发布时间】:2018-07-24 16:50:02
【问题描述】:

我正在尝试遍历长格式数据帧中的多个变量,以便找出按 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 循环来处理多个变量时,它告诉我每个人都只有一个不同的值。

任何帮助将不胜感激,因为我已经花了几个小时试图让它工作。

【问题讨论】:

  • 发布示例中的其他变量在哪里?

标签: r for-loop dplyr lapply


【解决方案1】:

我们可以使用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

【讨论】:

  • @RavinderSingh13 我用funs 包装它以创建带有后缀distinct 的新列。否则mutate_all(n_distinct) 就足够了,但它会用组中不同元素的数量替换原始列\
猜你喜欢
  • 2021-08-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多