【发布时间】:2019-03-05 13:07:49
【问题描述】:
我有这个数据框:
> 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 X1 X2 X3
a -0.25 -0.25 0
b -0.83 -0.2 0
每个百分比的公式是:
(counts of c(6,7) - counts of c(1,2,3,4)) / counts of c(1,2,3,4,5,6,7)。例如,要为X1 和a 获取-0.5:
Where the columns is `X1` and `YY = a`, then:
prom = counts of c(6,7) = 1
detr = counts of c(1,2,3,4) = 4
total = counts of c(1,2,3,4,5,6,7) = 6
The percentage is (prom - detr) / total = (1-4)/ 6 = -0.5
我正在尝试通过每列 (X1,X2, and X3) 上的循环来实现该输出,其中,对于每一列:
> table(df[,X1], df$YY)
a b
1 0 1
2 1 0
3 1 2
4 0 2
5 1 1
7 1 0
然后将a 和b 的相应计数相加。但我正在努力访问这个table(),并且对于每个YY,将各自的计数相加,休息它们,然后将它们除以计数的总数。我正在考虑使用expss::sum_if() 访问表格并按标准求和,但我仍然没有找到办法。
有没有更简单的方法呢?任何的想法?。我也尝试使用 dplyr,但是当我必须按类别分组并按列计数、求和和除以并以小输出结束时,它似乎更复杂。
【问题讨论】:
-
1) 使用
sample等函数时请使用set.seed()。 2) 请解释清楚。这个,(counts of c(6,7) - counts of c(1,2,3,4)) / counts of c(1,2,3,4,5,6,7)我不清楚 -
我开发了一个更好的例子。 set.seed() 是为了什么?
-
set.seed()是为了确保重现性。sample函数每次运行时都会采样不同的值,除非你设置了种子 -
一般来说,NPS 分数与
mean(case_when(x %in% 1:4~ 1, x %in% 6:7 ~ -1, TRUE ~ 0))完全相同。如果您将原始比例重新编码为 -1、0、1,那么所有进一步的计算将变得更加简单。此外,您可以使用组间的 t 检验轻松进行显着性检验。