R 在具有唯一行的多列中计算是/否
数据集看起来像这样,有18列R 在具有唯一行的多列中计算是/否,r,R,数据集看起来像这样,有18列 group q1 q2 q3 name q5 a yes yes no blanket yes b no no no water yes cc yes no no food no d yes no no utensils no 我只想计算每个组回答了多少是/否,不包括“name”列,所以我希望输出如下内容 group yes no a 15 10 b 7 1
group q1 q2 q3 name q5
a yes yes no blanket yes
b no no no water yes
cc yes no no food no
d yes no no utensils no
我只想计算每个组回答了多少是/否,不包括“name”列,所以我希望输出如下内容
group yes no
a 15 10
b 7 18
cc 20 5
d 1 24
我应该怎么做呢?您可以使用
pivot\u longer
将您的宽数据转换为长数据,然后根据组查找计数,然后使用pivot\u longer
库(tidyverse)
阅读.表格(text=“组q1 q2 q3名称q5
a是的是的不是毯子是的
b没有水是的
cc是否否否食物否
d是否“否”,标题=T)%>%
as_tible()%>%
选择(-name)%%>%
枢轴_更长(-group)%>%
分组依据(分组)%>%
计数(值)%>%
枢轴(名称从=值,值从=n)
#>#tibble:4 x 3
#>#组:组[4]
#>组否是
#>
#>1A13
#>2 b 3 1
#>3 cc 3 1
#>4D31
在2021-02-04年由(v0.3.0)在base R中创建,您可以使用
apply
:
cols <- grep('q\\d+', names(df))
cbind(df[1], t(apply(df[cols], 1, table)))
# group no yes
#1 a 1 3
#2 b 3 1
#3 cc 3 1
#4 d 3 1
colsAdata.table
选项与dcast
+table
dcast(
setDT(df)[,
data.table(table(unlist(.SD))),
group,
.SDcols = patterns("^q")
],
group ~ V1
)
给予
如果有18列(18个问题?),如何才能得到“是+否”合计为大于18的数字的行?这是一个示例。这并没有真正的帮助。
group no yes
1: a 1 3
2: b 3 1
3: cc 3 1
4: d 3 1