存在包含嵌套信息的数据帧。假设每个学校的学生人数、A班学生人数和B班学生人数。
因此,学生=n.pupilsa+n.pupilsb+其他学生
a <- data.frame(
city = c(rep('New York',3), rep('Washington',3)),
n = c(5, 2, 1, 5, 2, 1),
name = c(
'pupils',
'classA',
'classB',
'pupils',
'classA',
'classB'
)
)
输出:
city n name
1 New York 5 pupils
2 New York 2 classA
3 New York 1 classB
4 Washington 5 pupils
5 Washington 2 classA
6 Washington 1 classB
有没有一种聪明的方法(大概是使用dplyr)来进行一个组操作,将“其他”添加到每个组中,这将是“学生”和“学生-A级”+“学生-B级”之间的区别?结果是:
city type npupils
1 New York classA 2
2 New York classB 1
3 New York pupils 5
4 New York other 2
5 Washington classA 2
6 Washington classB 1
7 Washington pupils 5
8 Washington other 2
我认为唯一可行的方法是展开它,计算列之间的差异,然后使用
tidyr
:
a %>%
spread(name, n) %>%
mutate(other = pupils - classA - classB) %>%
gather(type, npupils, c('classA', 'classB', 'pupils', 'other')) %>%
arrange(city)
哪个有效,但我想知道是否有更好的方法?