r - 根据列值复制数据框中的行

标签 r dataframe splitstackshape

我正在尝试根据列的值复制行。 我的数据框(df)当前看起来像:

<表类=“s-表”> <标题> 物种名称 访问次数 <正文> 蜜蜂 4 熊熊升 7

等等(还有 34 列,都需要重复)我希望它看起来像:

<表类=“s-表”> <标题> 物种名称 <正文> 蜜蜂 蜜蜂 蜜蜂 蜜蜂 熊熊升 熊熊升 熊熊升 熊熊升 熊熊升 熊熊升 熊熊升

这是一个相当大的数据集,包含 1767 个观测值,有 190 个“物种名称”,每个都被访问了数百次。

我对 R(和编码!)非常陌生,所以一切都非常“反复试验”。我在 Stack Overflow 上找到了一个解决方案,使用 “splitstackshape”但收到错误

"Error in .subset2(x, i, exact = exact) : recursive indexing failed at level 2".

这是我的代码:

expandRows(df, df$Visits, 
           count.is.col = TRUE, drop = TRUE)

此错误的其他实例存在问题,但请注意与“扩展行”功能相关。该列存储为整数,并且我已从“访问”列中删除了所有空值。

任何有关我的问题可能是什么的指示或如何执行此操作的其他想法将不胜感激。

丹妮尔

编辑:下面的 Reprex,我不确定“找不到函数”与什么相关,因为它似乎在没有 Reprex 的情况下运行代码?另外,这里不包括实际的列名称和 df,我在上面的示例中进行了简化。

expandRows(BombusL, BombusL$No.of.Interaction.Records, count.is.col = TRUE, 
    drop = TRUE)
#> Error in expandRows(BombusL, BombusL$No.of.Interaction.Records, count.is.col = TRUE, : could not find function "expandRows"

最佳答案

更新(正如已经提到的uncount):

使用您的代码:

df.expanded <- df[rep(row.names(df), df$Visits), 1:2]

或者:您可以将sliceseq_len(n())一起使用

library(dplyr)
df %>%  
  slice(rep(seq_len(n()), Visits)) %>% 
  select(-Visits)

输出:

   Species.name
   <chr>       
 1 Apis m      
 2 Apis m      
 3 Apis m      
 4 Apis m      
 5 Bombus l    
 6 Bombus l    
 7 Bombus l    
 8 Bombus l    
 9 Bombus l    
10 Bombus l    
11 Bombus l    

关于r - 根据列值复制数据框中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67254187/

相关文章:

r - 如何找出 Mac OSX 中的 R 库位置?

dataframe - 如何在 Julia 中嵌套/取消嵌套数据框?

r - cSplit 库(splitstackshape)总是删除列

r - 在 "."中的 `fread` 中使用 sep = "data.table"

r - R中的分层数据拆分

r - 如何删除 R 中没有多个不同观测值的所有变量?

R 在不指定列名的情况下聚合大量列

r - 使用 ggplot2 构建折线图

xml - R中数据框的列表列表

r - 计算共享值