【问题标题】:Concatenating levels of one column and merging the values of another column [duplicate]连接一列的级别并合并另一列的值[重复]
【发布时间】:2019-09-13 03:26:27
【问题描述】:

我有一个常用级别为代表 (1-4) 的列。我在 col3 中有与它们相关的数据。有些级别不包含信息,但对于那些包含信息的级别,我想将 col1 中每个常见级别的值合并到一列中。 col3 中的值不一致。

我已尝试删除重复项,但这不会合并 col3 值。

train <- data.table(col1=c(rep('a0001',4),rep('b0002',4)), col2=c(seq(1,4,1),seq(1,4,1)), col3=c("12 43 543 1232 43 543", "","","","15 24 85 64 85 25 46","","658 1568 12 584 15684",""))

这是可重现的代码 我有大约 40000 行要做。

result<-data.frame(col1=c("a0001","b0002"),col3=c("12 43 543 1232 43 543",'15 24 85 64 85 25 46 658 1568 12 584 15684'))

这就是我要找的结果...

【问题讨论】:

标签: r merge concat


【解决方案1】:

我们可以将col3 值带入separate_rows,删除空值,group_by col1paste col3 值在一起。

library(dplyr)

train %>%
   tidyr::separate_rows(col3) %>%
   filter(col3 != '') %>%
   group_by(col1) %>%
   summarise(col3 = paste(col3, collapse = " "))

# col1  col3                                      
#  <chr> <chr>                                     
#1 a0001 12 43 543 1232 43 543                     
#2 b0002 15 24 85 64 85 25 46 658 1568 12 584 15684

【讨论】:

    【解决方案2】:

    我正在从@Ronak Shah 的回答中学习。这可能是一种变化:

    library(dplyr)
    train %>% group_by(col1) %>% summarise(col3 = paste(col3, collapse = " "))
    
      col1  col3                                          
      <chr> <chr>                                         
    1 a0001 "12 43 543 1232 43 543   "                    
    2 b0002 "15 24 85 64 85 25 46  658 1568 12 584 15684 "
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多