在 R 中聚合时创建虚拟变量
create dummy variables while aggregating in R
我想在 R 中聚合数据帧时创建虚拟变量。
dat <- read.table(textConnection('ID Score Info
1 1 A 1
2 1 A 10
3 1 B 7
4 2 C 8
5 2 B 9
6 2 B 1
7 3 B 7
8 3 C 8
9 3 C 3
10 3 A 2'))
基本上,我想按 "ID" 聚合并计算具有相同 ID 的行数,这很容易,但我还需要根据列 "Row" 创建虚拟变量。如果 A/B/C 出现在同一 ID 中,则虚拟变量的值为 1,否则为 0。
例如,ID 2 没有 A,因此 ID 2 的 Score_A 为 0,而 Score_B 和 Score_C.
为 1
输出如下:
ID Count Score_A Score_B Score_C
1 1 3 1 1 0
2 2 3 0 1 1
3 3 4 1 1 1
如有任何帮助,我们将不胜感激。
我们在按'ID'分组后创建一个频率列'Count',然后添加第二个分组'Score',summarise
第一个值'Count' ] 和一列 1,并且 spread
到 'wide' 格式
dat %>%
group_by(ID) %>%
mutate(Count = n()) %>%
group_by(Score = paste0("Score_", Score), add = TRUE) %>%
summarise(Count = first(Count), n1 = 1) %>%
spread(Score, n1, fill = 0)
# A tibble: 3 x 5
# Groups: ID [3]
# ID Count Score_A Score_B Score_C
#* <int> <int> <dbl> <dbl> <dbl>
#1 1 3 1.00 1.00 0
#2 2 3 0 1.00 1.00
#3 3 4 1.00 1.00 1.00
我想在 R 中聚合数据帧时创建虚拟变量。
dat <- read.table(textConnection('ID Score Info
1 1 A 1
2 1 A 10
3 1 B 7
4 2 C 8
5 2 B 9
6 2 B 1
7 3 B 7
8 3 C 8
9 3 C 3
10 3 A 2'))
基本上,我想按 "ID" 聚合并计算具有相同 ID 的行数,这很容易,但我还需要根据列 "Row" 创建虚拟变量。如果 A/B/C 出现在同一 ID 中,则虚拟变量的值为 1,否则为 0。 例如,ID 2 没有 A,因此 ID 2 的 Score_A 为 0,而 Score_B 和 Score_C.
为 1输出如下:
ID Count Score_A Score_B Score_C
1 1 3 1 1 0
2 2 3 0 1 1
3 3 4 1 1 1
如有任何帮助,我们将不胜感激。
我们在按'ID'分组后创建一个频率列'Count',然后添加第二个分组'Score',summarise
第一个值'Count' ] 和一列 1,并且 spread
到 'wide' 格式
dat %>%
group_by(ID) %>%
mutate(Count = n()) %>%
group_by(Score = paste0("Score_", Score), add = TRUE) %>%
summarise(Count = first(Count), n1 = 1) %>%
spread(Score, n1, fill = 0)
# A tibble: 3 x 5
# Groups: ID [3]
# ID Count Score_A Score_B Score_C
#* <int> <int> <dbl> <dbl> <dbl>
#1 1 3 1.00 1.00 0
#2 2 3 0 1.00 1.00
#3 3 4 1.00 1.00 1.00