R:添加值为 y 的 x 行

R: add x rows with value y

我有一个包含三列的数据框 (df1):NameDecadeCount。例如:

Name <- c("a","b","c")
Decade <- c(1810,1850,1900)
Count <- c(2,3,1)
df1 <- data.frame(Name,Decade,Count)
print(df1)
  Name Decade Count
1    a   1810     2
2    b   1850     3
3    c   1900     1

我希望创建一个新的数据框 (df2),其中包含列 NameDecade,并在 df1$Namedf1$Decade 中重复值行通过 df1$Count。对于 df2 中的每个重复行,我希望 df2$Decade 增加 10。每个 df2$Namedf2$Decade 组合的第一个实例将等于 df1$Namedf1$Decade.

在上面的例子中,我想要的输出是:

> print(df2)
  Name Decade
1    a   1810
2    a   1820
3    b   1850
4    b   1860
5    b   1870
6    c   1900

到目前为止,我很想展示我的作品,但我不知道如何开始并且一直在 excel 中手动完成。 [羞愧地低下头]

提前感谢您抽出时间。

这是一个使用 tidyversesplitstackshape 组合的选项。根据 Count 复制行后,我们可以使用 row_number 减 1 为每个组(例如 0、1、2...)创建一个序列,然后乘以 10 得到第 10 年递增并添加到该组的 Decade

library(tidyverse)
library(splitstackshape)

df2 <- expandRows(df1, "Count") %>% 
  group_by(Name) %>% 
  mutate(Decade = Decade + (row_number()-1) *10)

或者如果您不想加载另一个包,我们可以创建具有基数 R 的重复行:

df2 <- df1[rep(seq(nrow(df1)), df1$Count),c(1:2)] %>% 
  group_by(Name) %>% 
  mutate(Decade = Decade + (row_number()-1) *10)

输出

df2

  Name  Decade
  <chr>  <dbl>
1 a       1810
2 a       1820
3 b       1850
4 b       1860
5 b       1870
6 c       1900

序列应该很快排序:

df2 <- df1[rep(seq_len(nrow(df1)), df1$Count), 1:2]
df2$Decade <- df2$Decade + (sequence(df1$Count)-1) * 10
df2

#    Name Decade
#1      a   1810
#1.1    a   1820
#2      b   1850
#2.1    b   1860
#2.2    b   1870
#3      c   1900