按列分组,然后自动计算以相同字母开头的多个列
Group by a column and then automatically count over multiple columns starting with the same alphabet
我正在尝试结合 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
要求 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
包进行编码的能力。例如,
,
和
您可以使用 across
将函数应用于多个列。
library(dplyr)
df %>%
group_by(Task) %>%
summarise(across(.fns = ~sum(!is.na(.))))
#Or if you have other columns in your data
#apply the function to only the columns that start with 'q'
#summarise(across(starts_with('q'), ~sum(!is.na(.))))
# Task q1 q2
# <chr> <int> <int>
#1 Alpha 3 1
#2 Beta 1 1
#3 Gamma 0 1
我正在尝试结合 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
要求 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
包进行编码的能力。例如,
和
您可以使用 across
将函数应用于多个列。
library(dplyr)
df %>%
group_by(Task) %>%
summarise(across(.fns = ~sum(!is.na(.))))
#Or if you have other columns in your data
#apply the function to only the columns that start with 'q'
#summarise(across(starts_with('q'), ~sum(!is.na(.))))
# Task q1 q2
# <chr> <int> <int>
#1 Alpha 3 1
#2 Beta 1 1
#3 Gamma 0 1