我想用变量df
和number
df <- data.frame(a=c(4,4,3,3,3,2,4,4,5,5),
b=c(3,4,1,4,5,2,1,5,1,2),
c=c(5,3,2,1,2,4,5,3,3,3),
d=c(5,4,1,5,4,3,1,2,5,4),
grp=c(4,2,2,1,1,4,4,1,4,4))
df %>% group_by(grp) %>% summarise_each(funs(sum)) #only to see sums for grp variable!
number <-c(1,2,3,4)
我使用group_by
函数查看df
数据框中每列的总和。我想将grp
列中的值与number
向量中的值进行比较,并创建新的数据框:
number
值为1的行中的值等于行grp
1中的值,按&#39; grp&#39; number
值为2的行中的值等于行grp
1和grp
2中的值的总和,按&#39; grp&#39; number
值为3的行中的值等于行grp
1和grp
2中的值的总和(因为没有grp
3)按& #39; GRP&#39; number
值为4的行中的值等于行grp
1,grp
2和grp
4中的值的总和,按&#39; grp&#分组39; 最终结果:
new <- data.frame(grp=number,
a=c(10,17,17,37),
b=c(14,19,19,28),
c=c(6,11,11,31),
d=c(11,16,16,34)
)
new
# grp a b c d
#1 1 10 14 6 11
#2 2 17 19 11 16
#3 3 17 19 11 16
#4 4 37 28 31 34
答案 0 :(得分:2)
除cumsum
外,所有其他列似乎都需要grp
;要填写缺失的grp
,您可以将{em> tidyr :: complete 与number
一起使用:
library(dplyr); library(tidyr)
df %>%
group_by(grp) %>%
summarise_all(sum) %>%
complete(grp = number) %>%
mutate_at(vars(-one_of('grp')), ~ cumsum(coalesce(., 0)))
# A tibble: 4 x 5
# grp a b c d
# <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 10 14 6 11
#2 2 17 19 11 16
#3 3 17 19 11 16
#4 4 37 28 31 34