我想创建一个名为“X”的新变量,它是“B”和“D”的总和
type <- c( "A", "B","C","D","E")
cnt <- c(2,5,3,7,8)
df <- data.frame(type,cnt)
> df
type cnt
1 A 2
2 B 5
3 C 3
4 D 7
5 E 8
Run Code Online (Sandbox Code Playgroud)
期望的输出是
> df
type cnt
1 A 2
2 B 5
3 C 3
4 D 7
5 E 8
6 X 12
Run Code Online (Sandbox Code Playgroud)
如果我们添加另一个分组变量(例如日期),如何扩展它?想要每天添加 X
date <- c("2022-01-01","2022-01-01","2022-01-01","2022-01-01","2022-01-01","2022-01-02","2022-01-02","2022-01-02","2022-01-02","2022-01-02")
type <- c("A", "B","C","D","E","A", "B","C","D","E")
cnt <- c(2,5,3,7,8, 1,9,8,2,5)
df <- data.frame(date,type,cnt)
df
date type cnt
1 2022-01-01 A 2
2 2022-01-01 B 5
3 2022-01-01 C 3
4 2022-01-01 D 7
5 2022-01-01 E 8
6 2022-01-02 A 1
7 2022-01-02 B 9
8 2022-01-02 C 8
9 2022-01-02 D 2
10 2022-01-02 E 5
Run Code Online (Sandbox Code Playgroud)
期望的输出是
df
date type cnt
1 2022-01-01 A 2
2 2022-01-01 B 5
3 2022-01-01 C 3
4 2022-01-01 D 7
5 2022-01-01 E 8
6 2022-01-01 X 12
7 2022-01-02 A 1
8 2022-01-02 B 9
9 2022-01-02 C 8
10 2022-01-02 D 2
11 2022-01-02 E 5
12 2022-01-02 X 11
Run Code Online (Sandbox Code Playgroud)
您还可以使用:
df %>%
add_row(type= 'X', cnt = sum(.$cnt[.$type %in% c('B', 'D')]))
type cnt
1 A 2
2 B 5
3 C 3
4 D 7
5 E 8
6 X 12
Run Code Online (Sandbox Code Playgroud)
df %>%
group_by(date)%>%
group_modify(~add_row(.,type = 'X',
cnt = sum(.$cnt[.$type%in%c('B', 'D')])))
# A tibble: 12 x 3
# Groups: date [2]
date type cnt
<chr> <chr> <int>
1 2022-01-01 A 2
2 2022-01-01 B 5
3 2022-01-01 C 3
4 2022-01-01 D 7
5 2022-01-01 E 8
6 2022-01-01 X 12
7 2022-01-02 A 1
8 2022-01-02 B 9
9 2022-01-02 C 8
10 2022-01-02 D 2
11 2022-01-02 E 5
12 2022-01-02 X 11
Run Code Online (Sandbox Code Playgroud)