我正在尝试根据列的值复制行。 我的数据框(df)当前看起来像:
等等(还有 34 列,都需要重复)我希望它看起来像:
这是一个相当大的数据集,包含 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]
或者:您可以将slice
与seq_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/