R 如何在数据帧中单独复制字符串N次

R 如何在数据帧中单独复制字符串N次,r,replicate,R,Replicate,我有一个数据帧,我想根据下一个单元格的输入将单个单元格的输入复制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 数据我们可以使用rep复制术语计数次数,并将数据粘贴在一起 library(

我有一个数据帧,我想根据下一个单元格的输入将单个单元格的输入复制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

数据我们可以使用
rep
复制
术语
计数
次数,并将数据粘贴在一起

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

我们可以使用
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

或者将
base R
aggregate

aggregate(term ~ `document number`, data[rep(seq_len(nrow(data)), 
           data$count),], FUN = paste, collapse= ' ')
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
library(data.table)
setDT(data)[rep(seq_len(.N), count)][, .(term = 
        paste(term, collapse=' ')), `document number`]
aggregate(term ~ `document number`, data[rep(seq_len(nrow(data)), 
           data$count),], FUN = paste, collapse= ' ')