R:添加值为 y 的 x 行
R: add x rows with value y
我有一个包含三列的数据框 (df1
):Name
、Decade
和 Count
。例如:
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
),其中包含列 Name
和 Decade
,并在 df1$Name
和 df1$Decade
中重复值行通过 df1$Count
。对于 df2 中的每个重复行,我希望 df2$Decade
增加 10。每个 df2$Name
和 df2$Decade
组合的第一个实例将等于 df1$Name
和df1$Decade
.
在上面的例子中,我想要的输出是:
> print(df2)
Name Decade
1 a 1810
2 a 1820
3 b 1850
4 b 1860
5 b 1870
6 c 1900
到目前为止,我很想展示我的作品,但我不知道如何开始并且一直在 excel 中手动完成。 [羞愧地低下头]
提前感谢您抽出时间。
这是一个使用 tidyverse
和 splitstackshape
组合的选项。根据 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
我有一个包含三列的数据框 (df1
):Name
、Decade
和 Count
。例如:
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
),其中包含列 Name
和 Decade
,并在 df1$Name
和 df1$Decade
中重复值行通过 df1$Count
。对于 df2 中的每个重复行,我希望 df2$Decade
增加 10。每个 df2$Name
和 df2$Decade
组合的第一个实例将等于 df1$Name
和df1$Decade
.
在上面的例子中,我想要的输出是:
> print(df2)
Name Decade
1 a 1810
2 a 1820
3 b 1850
4 b 1860
5 b 1870
6 c 1900
到目前为止,我很想展示我的作品,但我不知道如何开始并且一直在 excel 中手动完成。 [羞愧地低下头]
提前感谢您抽出时间。
这是一个使用 tidyverse
和 splitstackshape
组合的选项。根据 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