【发布时间】:2019-03-11 14:40:11
【问题描述】:
我有这个数据框:
> set.seed(100)
> df <- data.frame(X1 = sample(c(1:7, NA), 10, replace=TRUE),
X2 = sample(c(1:7, NA), 10, replace=TRUE),
X3 = sample(c(1:7, NA), 10, replace=TRUE),
YY = sample(c("a","b"), 10, replace=TRUE),
stringsAsFactors = FALSE)
> df
X1 X2 X3 YY
1 3 5 5 a
2 3 NA 6 b
3 5 3 5 a
4 1 4 6 b
5 4 7 4 b
6 4 6 2 b
7 7 2 7 a
8 3 3 NA b
9 5 3 5 b
10 2 6 3 a
最终输出是这样的:
YY XX
a -0.17
b -0.38
每个百分比的公式是:
(counts of c(6,7) - counts of c(1,2,3,4)) / counts of c(1,2,3,4,5,6,7)。例如,要为a 获取-0.17:
Where the columns are all (`X1, X2, X3`) and `YY = a`, then:
prom = counts of c(6,7) = 3
detr = counts of c(1,2,3,4) = 5
total = counts of c(1,2,3,4,5,6,7) = 12
The percentage is (prom - detr) / total = (2-3)/ 9 = -0.17
但是,当我使用 summarize_all() 时,我只能按列计算:
df %>%
group_by(YY) %>%
summarize_all(~ (sum(.x %in% 6:7) - sum(.x %in% 1:4)) / sum(.x %in% 1:7))
YY X1 X2 X3
<chr> <dbl> <dbl> <dbl>
1 a -0.333 -1 0.333
2 b 0.167 -0.714 -0.667
当我要计算YY 中给定类别的所有列时,而不是每列(如上面所需的输出所示)。
【问题讨论】:
-
我忘记改了。更改已完成
标签: r dplyr data-manipulation