重复 data.frame 的每一行与另一个 data.frame 的 nrow() 一样频繁
repeat each row of a data.frame as often as nrow() of another data.frame
这个问题有很多类似的问题(如何在 data.frame 中重复行)。我无法实施我的问题的解决方案。我认为不同之处在于我想重复 df1 的每一行,就像 df2 中的 roes 一样。
df2 <- data.frame(col1=c('value1','value2','value3','value4','value5'),
col2=c('ani1','ani2','ani3','ani4','ani5'),co3=c('gut1','gut2','gut3','gut4','gut5'))
> df2
col1 col2 co3
1 value1 ani1 gut1
2 value2 ani2 gut2
3 value3 ani3 gut3
4 value4 ani4 gut4
5 value5 ani5 gut5
df1 <- df2 ##as you can see, df1 and df2 are equal initially
##I have tried the following
select <- NULL
for(i in 1:nrow(df1)){
k <- df1[rep(i),nrow(df2)]
select <- rbind(select,k)
}
df1 %>%
do( data.frame(column = rep(., each = nrow(df2)), stringsAsFactors = FALSE) )
select <- df1[rep(df1, nrow(df2))]
df1 <- df1[rep(df1[ ,1:3]),nrow(df2)]
##I want this result
df1
col1 col2 co3
1 value1 ani1 gut1
2 value1 ani1 gut1
3 value1 ani1 gut1
4 value1 ani1 gut1
5 value1 ani1 gut1
6 value2 ani2 gut2
7 value2 ani2 gut2
8 value2 ani2 gut2
9 value2 ani2 gut2
10 value2 ani2 gut2
11 value3 ani3 gut3
12 value3 ani3 gut3
13 value3 ani3 gut3
14 value3 ani3 gut3
15 value3 ani3 gut3
16 value4 ani4 gut4
17 value4 ani4 gut4
18 value4 ani4 gut4
19 value4 ani4 gut4
20 value4 ani4 gut4
21 value5 ani5 gut5
22 value5 ani5 gut5
23 value5 ani5 gut5
24 value5 ani5 gut5
25 value5 ani5 gut5
每一行都乘以 df2 中的行数。
感谢您的帮助
您可以重复行索引:
df1[rep(1:nrow(df1), nrow(df1)), ]
或使用tidyr::uncount
library(dplyr)
tidyr::uncount(df1, n())
还有 tidyr :
library(tidyr)
complete(df1, co3, nesting(col1, col2))
这个问题有很多类似的问题(如何在 data.frame 中重复行)。我无法实施我的问题的解决方案。我认为不同之处在于我想重复 df1 的每一行,就像 df2 中的 roes 一样。
df2 <- data.frame(col1=c('value1','value2','value3','value4','value5'),
col2=c('ani1','ani2','ani3','ani4','ani5'),co3=c('gut1','gut2','gut3','gut4','gut5'))
> df2
col1 col2 co3
1 value1 ani1 gut1
2 value2 ani2 gut2
3 value3 ani3 gut3
4 value4 ani4 gut4
5 value5 ani5 gut5
df1 <- df2 ##as you can see, df1 and df2 are equal initially
##I have tried the following
select <- NULL
for(i in 1:nrow(df1)){
k <- df1[rep(i),nrow(df2)]
select <- rbind(select,k)
}
df1 %>%
do( data.frame(column = rep(., each = nrow(df2)), stringsAsFactors = FALSE) )
select <- df1[rep(df1, nrow(df2))]
df1 <- df1[rep(df1[ ,1:3]),nrow(df2)]
##I want this result
df1
col1 col2 co3
1 value1 ani1 gut1
2 value1 ani1 gut1
3 value1 ani1 gut1
4 value1 ani1 gut1
5 value1 ani1 gut1
6 value2 ani2 gut2
7 value2 ani2 gut2
8 value2 ani2 gut2
9 value2 ani2 gut2
10 value2 ani2 gut2
11 value3 ani3 gut3
12 value3 ani3 gut3
13 value3 ani3 gut3
14 value3 ani3 gut3
15 value3 ani3 gut3
16 value4 ani4 gut4
17 value4 ani4 gut4
18 value4 ani4 gut4
19 value4 ani4 gut4
20 value4 ani4 gut4
21 value5 ani5 gut5
22 value5 ani5 gut5
23 value5 ani5 gut5
24 value5 ani5 gut5
25 value5 ani5 gut5
每一行都乘以 df2 中的行数。 感谢您的帮助
您可以重复行索引:
df1[rep(1:nrow(df1), nrow(df1)), ]
或使用tidyr::uncount
library(dplyr)
tidyr::uncount(df1, n())
还有 tidyr :
library(tidyr)
complete(df1, co3, nesting(col1, col2))