【问题标题】:Spread Data in R [duplicate]在R中传播数据[重复]
【发布时间】:2019-10-31 16:31:43
【问题描述】:

我正在尝试在 R 数据框中传播单个列。我已经查看了许多关于 SO 的帖子,但无法让我的解决方案发挥作用,因为大多数解决方案似乎都需要一个公式(计数、平均值、总和等)。我只是想传播一列字符。例如:

library(tidyverse)

school<- c("univ1", "univ2","univ1", "univ2","univ1" )
student<-c('bob', 'sally','ben','trudy','evan')

df <- data.frame(school, student)

产生:

school            student
univ1             bob
univ2             sally
univ1             ben
univ2             trudy
univ1             evan

但我想要输出的是:

school            student1      student2     student2
univ1             bob           ben          evan
univ2             sally         trudy

我将如何做到这一点?我尝试了 spread() 和 pivot_wider() 但都不起作用。有什么想法吗?实际数据集非常大(超过 300k 行数据),需要以这种方式进行转置,以防产生影响。

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    为每个组指定学生编号并根据该编号进行分配

    df %>% group_by(school) %>% mutate(n=paste("student",1:n())) %>% spread(n,student)
    

    【讨论】:

      【解决方案2】:

      在使用 spread() 之前,您需要指定 student1、student2 和 student3。我建议添加一个新列进行传播,例如:

      df %>%
      group_by(school) %>%
      mutate(
       student_number = row_number(),
       student_number = str_c("student_", student_number)
      ) %>%
      ungroup() %>%
      spread(student_number,student)
      

      【讨论】:

      • 我刚发布后就看到了你的答案。好电话
      • 伟大的思想和所有这些:)
      • +1 感谢分享此代码。它提供了所要求的解决方案,不幸的是我只能选择一个正确的解决方案!谢谢!
      猜你喜欢
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 2021-06-24
      • 1970-01-01
      • 2022-01-22
      • 2015-02-27
      相关资源
      最近更新 更多