【问题标题】:Data table split value error in RR中的数据表拆分值错误
【发布时间】:2016-07-20 08:59:32
【问题描述】:

我在 R 中创建了一个简单的基于 data.table 的函数,它允许我插入所需的数据框并用分号拆分值,以便创建完整列表扩展的附加行和其他列的条目保持不变。

splitSemicolons = function(x){
new_df <- data.table(x, key="SampleID")
final_df <- new_df[, list(Identifier = unlist(strsplit(Identifier, ";"))), by=c('SampleID', 'Name')]
}

我的数据框

>df
SampleID, Name, Identifier
1, John, PS897
2, Mary, GF521
3, George, DG636;DG637
4, Helen, 
5, Patrick, WV168

由于某种原因,执行该功能后,控制台给了我错误; “找不到对象'标识符'”,而不是提供下面的结果。奇怪的是,代码在函数括号之外完美运行,但完全删除了带有空白值的条目,例如 SampleID=4 中的 Helen。

>desired_result
SampleID, Name, Identifier
1, John, PS897
2, Mary, GF521
3, George, DG636
3, George, DG637
4, Helen, 
5, Patrick, WV168

【问题讨论】:

    标签: r split data.table


    【解决方案1】:

    我们可以使用cSplit通过在分隔符(;)处拆分将“宽”格式转换为“长”格式,并将stripWhite指定为“FALSE”以确保不删除空白行。

    library(splitstackshape)
    cSplit(df, "Identifier", ";", "long", stripWhite=FALSE)
    #   SampleID     Name Identifier
    #1:        1     John      PS897
    #2:        2     Mary      GF521
    #3:        3   George      DG636
    #4:        3   George      DG637
    #5:        4    Helen           
    #6:        5  Patrick      WV168
    

    或者,如果我们使用data.table,将“data.frame”转换为“data.table”(setDT(df)),按照每行中; 的数量复制行序列,然后执行拆分按“SampleID”分组的unique“标识符”并将其分配(:=)作为“标识符”列。

    library(data.table)
    library(stringr)
    setDT(df)[rep(1:.N,str_count(Identifier, ";")+1)][, 
              Identifier := strsplit(unique(Identifier), ";"), SampleID][]
    #   SampleID     Name Identifier
    #1:        1     John      PS897
    #2:        2     Mary      GF521
    #3:        3   George      DG636
    #4:        3   George      DG637
    #5:        4    Helen           
    #6:        5  Patrick      WV168
    

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 2021-09-11
      • 2019-08-07
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      相关资源
      最近更新 更多