【问题标题】:How to replicate a String in a dataframe individually N times [duplicate]如何在数据框中单独复制字符串N次[重复]
【发布时间】:2019-10-08 13:20:18
【问题描述】:

我有一个数据框,我想根据下一个单元格的输入复制单个单元格的输入 n 次并将其显示在一个新单元格中。

我的数据框如下所示:

data <- data.frame(c(1,1,2,3,4,4,4), c("A","B","A","C","D","E","A"), c(2,1,1,3,2,1,3))
colnames(data) <- c("document number", "term", "count")
data

这是我想要的结果:

datanew <- data.frame(c(1,2,3,4), c("A A B", "A", "C C C", "D D E A A A"))
colnames(datanew) <- c("document number", "term")


#   document number        term
# 1               1       A A B
# 2               2           A
# 3               3       C C C
# 4               4 D D E A A A

所以基本上,我喜欢将术语单元格的输入与相应计数单元格的输入相乘。有谁知道如何在 R 中编写代码?

【问题讨论】:

    标签: r replicate


    【解决方案1】:

    我们可以使用rep 复制term count 次和paste 数据一起。

    library(dplyr)
    
    data %>%
      group_by(`document number`) %>%
      summarise(new = paste(rep(term, count), collapse = " "))
    
    # A tibble: 4 x 2
    #  `document number` new        
    #              <dbl> <chr>      
    #1                 1 A A B      
    #2                 2 A          
    #3                 3 C C C      
    #4                 4 D D E A A A
    

    data.table类似

    library(data.table)
    setDT(data)[, (new =  paste(rep(term, count), collapse = " ")), 
                   by = `document number`]
    

    【讨论】:

      【解决方案2】:

      我们可以使用tidyverse 方法来做到这一点

      library(dplyr)
      library(tidyr)
      library(stringr)
      data %>%
         uncount(count) %>%
         group_by(`document number`) %>% 
         summarise(term = str_c(term, collapse=' '))
      # A tibble: 4 x 2
      #  `document number` term       
      #              <dbl> <chr>      
      #1                 1 A A B      
      #2                 2 A          
      #3                 3 C C C      
      #4                 4 D D E A A A
      

      data.table

      library(data.table)
      setDT(data)[rep(seq_len(.N), count)][, .(term = 
              paste(term, collapse=' ')), `document number`]
      

      或者使用base Raggregate

      aggregate(term ~ `document number`, data[rep(seq_len(nrow(data)), 
                 data$count),], FUN = paste, collapse= ' ')
      

      【讨论】:

        猜你喜欢
        • 2013-10-12
        • 2010-09-21
        • 2019-11-12
        • 1970-01-01
        • 2018-07-04
        • 2018-08-10
        • 2013-07-27
        • 2014-04-17
        相关资源
        最近更新 更多