基于另一列的 R 动态列名称

标签 r tidyr

我有一个这样的表:

types <- c("ENR","ENR","ENR","ENR","ENR","ENR")
records <- c(1,1,1,1,2,2)
occur <- c(1,2,3,4,1,2)
myval <- c("ABC|123","DEF|456","GHI|789","JKL|123","MNO|456","PQR|789")

mydf <- data.frame(types, records, occur, myval)


type   record   occur    myval
ENR    1        1        ABC|123
ENR    1        2        DEF|456
ENR    1        3        GHI|789
ENR    1        4        JKL|123
ENR    2        1        MNO|456
ENR    2        2        PQR|789

我正在解析 myval 列,以便分隔字段获得自己的列,这是我到目前为止使用的内容

library(tidyr)
mydf <- mydf %>% separate(myval, c("letters","numbers"),"\\|")

这本质上是有效的,它创建了这个:

  types records occur letters numbers
1   ENR       1     1     ABC     123
2   ENR       1     2     DEF     456
3   ENR       1     3     GHI     789
4   ENR       1     4     JKL     123
5   ENR       2     1     MNO     456
6   ENR       2     2     PQR     789    

....但是,我希望列名称根据发生#是动态的,所以我理想地喜欢这样:

 types records occur letters1 numbers1  letters2  numbers2  letters3 numbers3 letters4 numbers4
 ENR         1     1      ABC      123
 ENR         1     2                         DEF       456
 ENR         1     3                                             GHI      789
 ENR         1     4                                                              JKL      123
 ENR         2     1      MNO      456
 ENR         2     2                         DEF       456

知道如何实现这一点吗?我在想是否可以动态命名可能有效的列?

最佳答案

我们可以使用 data.table 中的 dcast,它可以采用多个 value.var

library(data.table)
dcast(setDT(mydf), types + records + occur ~ occur, value.var = c("letters", "numbers"), fill="")
#   types records occur letters_1 letters_2 letters_3 letters_4 numbers_1 numbers_2 numbers_3 numbers_4
#1:   ENR       1     1       ABC                                     123                              
#2:   ENR       1     2                 DEF                                     456                    
#3:   ENR       1     3                           GHI                                     789          
#4:   ENR       1     4                                     JKL                                     123
#5:   ENR       2     1       MNO                                     456                              
#6:   ENR       2     2                 PQR                                     789                    

关于基于另一列的 R 动态列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41050676/

相关文章:

R - 通过特定变量修改 ggplot 列宽度并使用该变量作为 X 轴上的引用

r - 如何获得两个向量的交点?

r - 使用 R 主成分分析。自动和手动结果不匹配

r - 如何在ggtree的系统发育树中的同一标签中同时应用斜体和普通字体

r - 解除多列嵌套

r - 将百万/十亿缩写变为实际数字? IE。 5.12M -> 5,120,000

r - 根据逗号分割数据框列

r - 如何根据 R 中另一列的值填充空白

r - 为 GoogleMap 绘图添加透明度(loa 包)

r - 提取行号以匹配索引 R 不起作用