我是R的新手,如果你能分享你的想法,我将非常感激。 找到Applying calculation per groups within R dataframe之后,我决定使用data.table来计算返回的受访者百分比''所有回复的受访者中都有' a'或者' b'。
我的示例数据可以从下面获得(带有一些警告信息):
library(data.table)
df = data.table(rep(c("I", "II", "III", "IV")), rep(c("A", "B", "C")),
rep(c("a", "a", "b", "b", "b"), 10))
colnames(df) = c("grp1", "grp2", "Q1")
以下是我目前获得预期结果的代码;
#1. Obtain the number of rows on Q1 with 'a' and 'b' broken down by grp1 and grp2
ab = df[Q1 %in% c("a", "b"), .N, by = .(grp1, grp2)][order(grp1, grp2)]
#2. Obtain the equivalent number of rows on Q1 with 'b' only
b = df[Q1 %in% "b", .N, by = .(grp1, grp2)][order(grp1, grp2)]
# 3. Merge tables 'ab' and 'b' into 'a'
a = merge(b, ab, by = c("grp1", "grp2"))
# 4. Calculate %b in table a
a$agree = a[, 3]/a[, 4]*100
grp1 grp2 N.x N.y agree
1: I A 3 5 60
2: I B 2 4 50
3: I C 3 4 75
4: II A 2 4 50
5: II B 3 5 60
6: II C 2 4 50
7: III A 2 4 50
8: III B 2 4 50
9: III C 3 4 75
10: IV A 3 4 75
11: IV B 3 4 75
12: IV C 2 4 50
# 5. Remove unnecessary columns
a[, 3:4] = NULL
grp1 grp2 agree
1: I A 60
2: I B 50
3: I C 75
4: II A 50
5: II B 60
6: II C 50
7: III A 50
8: III B 50
9: III C 75
10: IV A 75
11: IV B 75
12: IV C 50
以上是我需要的输出。现在我有50个问卷项目(Q1到Q50),如果我想为这50个问题获得相同的输出,我将不得不重复相同的过程(1到5)50次,这并不理想。
我想找到一种避免这种重复过程的方法。
我确信必须有一种优雅的方式来自动化这个过程,但作为一个新手,我还没有找到方法。我认为应该以你可能拥有的良好实践为指导,而不是由我有限的知识驱动。