整个数据框的条件计数和分组

时间:2019-02-27 11:58:13

标签: r dplyr data-manipulation

我有这个数据框:

> df <- data.frame(Semester = sample(1:4, 20, replace=TRUE),
                  X1 = sample(c(1:7,NA), 20, replace =TRUE),
                  X2 = sample(c(1:7,NA), 20, replace =TRUE),
                  X3 = sample(c(1:7,NA), 20, replace =TRUE),
                  X4 = sample(c(1:7,NA), 20, replace =TRUE),
                  X5 = sample(c(1:7,NA), 20, replace =TRUE),
                  X6 = sample(c(1:7,NA), 20, replace =TRUE),
                  X7 = sample(c(1:7,NA), 20, replace =TRUE),
                  stringsAsFactors = FALSE)
> df
   Semester X1 X2 X3 X4 X5 X6 X7
1         4  3  7 NA NA  1  2  7
2         3 NA  3 NA  4  3  2  6
3         1  2  5  3  4  7 NA  2
4         3  1  1  6  1  3  2  4
5         1  1  2  1  3  2  6  5
6         2  1  7  1  5  2  2  6
7         4  7  6  5  2  7  1  2
8         1  5  5  7  4  5  1  5
9         1  3  1  1  5  6  3  7
10        3  6 NA  1  1  5 NA  2
11        1  1  6  6  6  3  5  7
12        3  1  5  1  2  3  1 NA
13        4  1  4  1  1  5  6  1
14        1  5  4  4 NA  5  3  3
15        2  2 NA  4  1  1  5  4
16        3  6  7  6  7  3  3  7
17        1  1  2  4  5  4  5  3
18        4  4  7  7  6 NA  4 NA
19        3  4  2  3  4  4  3  5
20        2  1 NA  3  5  7 NA  6

我正在尝试获得此输出,其中n_*是所有n_*变量的数字X*的计数。例如,n_7的{​​{1}}是其中Semester==1值为7的计数(此输出仅是参考值,这些值是人工的)。

X*

我尝试过Semester n_7 n_6 n_5 n_4 n_3 n_2 n_1 1 5 7 1 5 7 7 7 2 4 10 1 3 6 3 4 3 5 5 2 5 3 3 2 4 3 9 10 5 7 0 0 ,但是它也计算by()的值。还有另一种方法吗?:

Semester

1 个答案:

答案 0 :(得分:0)

您可以使用dcast() melt()方法。

library(data.table)
dcast(melt(df, "Semester"), Semester ~ value, fun=length)[-9]
#   Semester 1 2  3 4 5 6 7
# 1        1 5 8 10 2 7 8 4
# 2        2 8 6  7 2 5 2 5
# 3        3 2 1  4 3 2 4 5
# 4        4 1 1  3 4 7 2 8