首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R代码:列到行,即组对个人

R代码:列到行,即组对个人
EN

Stack Overflow用户
提问于 2021-08-23 20:47:32
回答 2查看 50关注 0票数 2

我的目标是将某些列放到行中,其中列共享一个id,例如班级组中的学生。

请看这里:

代码语言:javascript
复制
  Group Student1 Age1 Grade1 Student2 Age2 Grade2
1     1    Sarah   17      A     John   16      B
2     2      Tom   15      B    Harry   16      C
3     3     Mary   15      C     Jack   18      A

我想要这些数据,这样每一行都是学生,而不是上面的组:

代码语言:javascript
复制
  Group Student Age Grade
1     1   Sarah  17     A
2     1    John  16     B
3     2     Tom  15     B
4     2   Harry  16     C
5     3    Mary  15     C
6     3    Jack  18     A

我试过用

代码语言:javascript
复制
newData <- melt(dat, id.vars = c("id")) 

但是这给出了一个id列表和所有其他值作为一个列。有函数可以得到上面的结果吗?

数据:

代码语言:javascript
复制
dat <- structure(
    list(
      Group = 1:3,
      Student1 = c("Sarah", "Tom", "Mary"),
      Age1 = c(17L, 15L, 15L),
      Grade1 = c("A", "B", "C"),
      Student2 = c("John", "Harry", "Jack"),
      Age2 = c(16L, 16L, 18L),
      Grade2 = c("B", "C", "A")
    ),
    class = "data.frame",
    row.names = c(NA,-3L)
  )  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-23 22:18:37

使用data.table

代码语言:javascript
复制
library(data.table)
melt(setDT(dat), id.var = 'Group',
    measure = patterns("Student", "Age",  "Grade"),
    value.name = c("Student", "Age", "Grade"))[, variable := NULL][]
   Group Student Age Grade
1:     1   Sarah  17     A
2:     2     Tom  15     B
3:     3    Mary  15     C
4:     1    John  16     B
5:     2   Harry  16     C
6:     3    Jack  18     A
票数 1
EN

Stack Overflow用户

发布于 2021-08-23 21:03:00

代码语言:javascript
复制
reshape(df, 2:ncol(df), idvar = 'Group', sep='', dir = 'long')
    Group time Student Age Grade
1.1     1    1   Sarah  17     A
2.1     2    1     Tom  15     B
3.1     3    1    Mary  15     C
1.2     1    2    John  16     B
2.2     2    2   Harry  16     C
3.2     3    2    Jack  18     A

tidyr::pivot_longer(df, -Group, names_pattern ='(\\D+)', names_to = '.value')
# A tibble: 6 x 4
  Group Student    Age Grade
  <int> <chr>    <int> <chr>
1     1 " Sarah"    17 " A" 
2     1 " John"     16 " B" 
3     2 " Tom"      15 " B" 
4     2 " Harry"    16 " C" 
5     3 " Mary"     15 " C" 
6     3 " Jack"     18 " A" 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68898847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档