【发布时间】:2021-09-16 17:01:56
【问题描述】:
我正在尝试结合group_by 功能做一个简单的counts 操作。
例如df如下:
Task q1 q2
Alpha 1 NA
Beta NA NA
Alpha 4 2
Alpha 5 NA
Beta 2 2
Gamma NA 3
我想要以下输出
Task q1 q2
Alpha 3 1
Beta 1 1
Gamma 0 1
要求一:
总的来说,我想计算条目对应于非缺失值的次数(在本例中为 0-5 之间的任何值)。我对值是什么不感兴趣,我只对它们被报告的次数感兴趣 - 对应于每个任务。
我可以使用sqldf 执行此操作,如下所示:
sqldf('SELECT Task, count(q1), count(q2)
FROM df
GROUP BY Task')
我也可以使用dplyr 包来做到这一点:
df %>%
group_by(Task) %>%
summarise(q1 = sum(!is.na(q1)),
q2 = sum(!is.na(q2)))
但我想知道是否有自动执行此操作的方法,例如,当我有可变数量的度量时,有时是 q1:q3,有时它们可能是 q1:q10。像paste0("q", 1:n) 这样的东西。但是我很难将它整合到我的代码中。
要求 2:
稍后,我还想为每个任务alpha, beta, gamma 计算每个度量q 的出现百分比。
任何帮助将不胜感激。
我看过其他帖子,但它们对我没有用,可能是因为我缺乏使用 dplyr 包进行编码的能力。例如,
r: group by multiple columns and count,
How do I get count from multiple columns in R?
和
【问题讨论】:
-
sprintf("select Task, %s from df group by Task", toString(sprintf("count(%s)", paste0("q", 1:n))))
标签: r dplyr group-by count aggregate