【问题标题】:Extract information from multiple columns at different positions using R [duplicate]使用R从不同位置的多列中提取信息[重复]
【发布时间】:2021-02-02 06:38:10
【问题描述】:

我有一个大约有一个数据框。 26,000 个条目。数据框有一个 ID 列,ID 用“;”分隔并且多个值列也用“;”分隔。它看起来像这样:

df <- data.frame (ID = c("sample1;sample2;sample3", "sample3", "sample3;sample4;sample5;sample6"),
                  value_1 = c("10;20;30", "30", "30;40;50;60"),
                  value_2 = c("130", "130", "130"))

问题是ID条目的数量和位置以及对应的值在一行内是恒定的,但在各行之间它们是不同的。此外,有些列(例如 value_2)中的条目应保持不变。有没有一种简单的方法可以降低数据集的复杂性?谢谢

【问题讨论】:

    标签: r dplyr complexity-theory reduction


    【解决方案1】:

    我们可以使用separate_rows

    library(dplyr)
    library(tidyr)
    df %>% 
      separate_rows(ID, value_1, convert = TRUE)
    

    -输出

    # A tibble: 8 x 3
    # ID      value_1 value_2
    #  <chr>     <int> <chr>  
    #1 sample1      10 130    
    #2 sample2      20 130    
    #3 sample3      30 130    
    #4 sample3      30 130    
    #5 sample3      30 130    
    #6 sample4      40 130    
    #7 sample5      50 130    
    #8 sample6      60 130    
    

    或使用cSplit

    library(splitstackshape)
    cSplit(df, c("ID", "value_1"), ";", "long")
    

    【讨论】:

    • 亲爱的akrun,感谢您的快速回答!如果条目的数量不是恒定的,你会知道我能做什么吗?例如,如果数据框如下所示:df &lt;- data.frame (ID = c("sample1;sample2;sample3", "sample3", "sample3;sample4;sample5;sample6"), value_1 = c("10;20;30", "30", "30;40;50;60;70;80"), constant = c("130", "130", "130"))
    • @Heiko cSplit 可以解决这个问题,但我不确定预期的输出是什么
    • 我刚刚检查过 - 它运行完美,速度极快!非常感谢,阿克伦!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多