【问题标题】:Separate 2 differents variables from a text column从文本列中分离 2 个不同的变量
【发布时间】:2021-11-25 01:18:12
【问题描述】:

我是 R 的新手,我被卡住了。

我有一个具有固定宽度部分和可变部分的数据框,如下所示:

df <- data.frame(
 var1 =  c('a','b','c'), 
 var2 =  c('d','e','f'),
 freqA = c(3,1,0),
 freqB = c(0,2,1),
 R1 =    c('A1A2A3    ','A1Ba1Ba2  ','Ba1       '))

提供此演示文稿:

>df
|var1|var2|freqA|freqB|        R1|
|   a|   d|    3|    0|A1A2A3    |
|   b|   e|    1|    2|A1Ba1Ba2  |
|   c|   f|    0|    1|Ba1       |

对于每一行:

  • freqA 为您提供“A”的数量。在 R1 列中,“A_”在 2 上 字符。

  • freqB 在 R1 列中为您提供“B..”的数量,而“B__”位于 3 字符。

我想将 R1 列中的数据拆分并组织成 2 个不同的数据框,如下所示:

df_freqA
    |var1|R1|R2|R3|
    |   a|A1|A2|A3|
    |   b|A1|  |  |
    |   c|  |  |  |

df_freqB
    |var1| R1| R2| R3|
    |   a|   |   |   |
    |   b|Ba1|Ba2|   |
    |   c|Ba1|   |   |

我已经尝试了一些带有位置参数的 stringr 和 dplyr 函数,但我无法让它工作。 还尝试了错误的 rep() 函数:无效的 'times' 参数。

任何帮助将不胜感激:)

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试,

    library(plyr)
    library(dplyr)
    library(stringr)
    
    df1 = str_extract_all(df$R1, "[A-Z]+[0-9]+" ) %>% ldply(rbind) 
    df1 = `colnames<-`(df1, paste0('R', seq_len(ncol(aa))))
    cbind(df[,1:3], df1)
      var1 var2 freqA   R1   R2   R3
    1    a    d     3   A1   A2   A3
    2    b    e     1   A1 <NA> <NA>
    3    c    f     0 <NA> <NA> <NA>
    
    
    df2 = str_extract_all(df$R1, "[A-Z]+[a-z]+[0-9]+" )%>% ldply(rbind) 
    df2 = `colnames<-`(df2, paste0('R', seq_len(ncol(df2))))
    cbind(df[,1:3], df2)
      var1 var2 freqA   R1   R2
    1    a    d     3 <NA> <NA>
    2    b    e     1  Ba1  Ba2
    3    c    f     0  Ba1 <NA>
    

    【讨论】:

    • 哇,这比我预期的要多!真挚地 !我会用一点正则表达式来调整它,我应该实现我所有的愿望!非常感谢您提供此解决方案 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2019-05-05
    • 2011-08-18
    相关资源
    最近更新 更多