聚合插入字符串

时间:2017-10-03 13:34:46

标签: r grouping

我有一个名为教师的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"))

我在Grouping inserting strings

的帮助下做了类似的分组

感谢您的帮助

2 个答案:

答案 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
相关问题