根据R中的其他列值复制行

时间:2019-10-28 10:15:30

标签: r dataframe duplicates row

我想按列Count复制行。对于示例数据,我的代码工作正常,但是当我尝试使用大数据集时,出现错误:

  

rep(seq_len(dim(df1)[1]),df1 $ Count)中的错误:无效的'times'参数

我的数据和代码:

df1 <- data.frame(Month = rep(month.abb[1:12],10,replace = TRUE), Product = paste0('Product ', rep(LETTERS[1:10], each = 12)),
                  Count = sample(c(1:10),120, replace = T),  stringsAsFactors = F)


df2 <- data.frame(df1[rep(seq_len(dim(df1)[1]), df1$Count), , drop = FALSE], row.names=NULL)

head(df2)
  Month   Product Count
1   Jan Product A     1
2   Feb Product A     4
3   Feb Product A     4
4   Feb Product A     4
5   Feb Product A     4
6   Mar Product A    10

我有由45000行和5列组成的数据,包括4个字符和1个数字。对于这些数据,我得到了以上错误。

1 个答案:

答案 0 :(得分:2)

您可以这样做。这处理负值和NA

df2 <- data.frame(df1[rep(seq_len(dim(df1)[1]),  with(df1, ifelse(Count > 0 & !is.na(Count), Count, 1))
), , drop = FALSE], row.names=NULL)

Count为负或NA的行将保持原样(这意味着它们将被复制到df2一次,而无需重复)。