我有一个名为教师的Dataframe:
Teachers <- data.frame(Discipline = c("Math","Math","Chem","Arts","History","History"),
Teacher = c("Mark","Mark","Peter","Richard","Mark","Mark"),
Position = c("Coord","Teacher", "Teacher", "Teacher","Coord","Teacher"))
在这种情况下,Mark是两个学科的Coord / Teacher。我怎么能使用基本的R命令得到这样的输出:
Teachers2 <- data.frame(Discipline = c("Math","Chem","Arts","History"),
Teacher = c("Mark","Peter","Richard","Mark"),
Position = c("Coord/Teacher", "Teacher", "Teacher","Coord/Teacher"))
的帮助下做了类似的分组
感谢您的帮助
答案 0 :(得分:1)
您可以使用:
library(dplyr)
Teachers %>%
group_by(Teacher, Discipline) %>%
summarise(Position = paste0(Position, collapse = '/'))
结果:
# A tibble: 4 x 3
# Groups: Teacher [?]
Teacher Discipline Position
<fctr> <fctr> <chr>
1 Mark History Coord/Teacher
2 Mark Math Coord/Teacher
3 Peter Chem Teacher
4 Richard Arts Teacher
另一个可能值得考虑的选择:
Teachers %>%
group_by(Teacher) %>%
summarise(Discipline = paste0(unique(Discipline), collapse = '/'),
Position = paste0(unique(Position), collapse = '/'))
结果:
# A tibble: 3 x 3
Teacher Discipline Position
<fctr> <chr> <chr>
1 Mark Math/History Coord/Teacher
2 Peter Chem Teacher
3 Richard Arts Teacher
答案 1 :(得分:1)
使用aggregate
函数的基础R
解决方案:
aggregate(Position ~ Discipline + Teacher, data = Teachers,
function(x) paste0(x, collapse = '/'))
# Discipline Teacher Position
# 1 History Mark Coord/Teacher
# 2 Math Mark Coord/Teacher
# 3 Chem Peter Teacher
# 4 Arts Richard Teacher
或等效(HT @ h3rm4n):
aggregate(Position ~ Discipline + Teacher, data = Teachers,
paste0, collapse = '/')
# Discipline Teacher Position
# 1 History Mark Coord/Teacher
# 2 Math Mark Coord/Teacher
# 3 Chem Peter Teacher
# 4 Arts Richard Teacher