R:重复 Dataframe 的行k次,并为新行值添加前缀

nqwrtyyt  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(136)

我从this answer中知道如何复制 Dataframe 的行,如果你想重复n次行的话,这很好。
我想做一些类似的事情,但也要在新添加行的列中添加前缀。我并不是根据行数来计算重复次数,而是需要一个参数(称之为k)。
因此,假设我想重复 Dataframe k = 3次,操作应该如下所示:
输入:

data.frame(a = c("1","2","3", "4"),b = c(1,2,3, 4))
  a b
1 "1" 1
2 "2" 2
3 "3" 3
4 "4" 4

输出:

a b
1 "1" 1
2 "2" 2
3 "3" 3
4 "4" 4
5 "1_1" 1
6 "1_2" 2
7 "1_3" 3
8 "1_4" 4
9 "2_1" 1
10 "2_2" 2
11 "2_3" 3
12 "2_4" 4

有什么好的方法可以做到这一点?

xriantvc

xriantvc1#

您可以使用expand_grid(假设您的 Dataframe 命名为df1):

library(dplyr)
library(tidyr)

expand_grid(a = df1$a, b = df1$b) %>% 
  mutate(a = paste(a, b, sep = "_")) %>% 
  bind_rows(df1, .)

这将返回

a b
1    1 1
2    2 2
3    3 3
4  1_1 1
5  1_2 2
6  1_3 3
7  2_1 1
8  2_2 2
9  2_3 3
10 3_1 1
11 3_2 2
12 3_3 3
ulmd4ohb

ulmd4ohb2#

tidyversecrossing配合使用

library(tidyr)
library(dplyr)
 data.frame(a = c("1","2","3"),b = c(1,2,3)) %>%
   add_row(crossing(!!! .) %>%
   unite(a, a, b, remove = FALSE))
  • 输出
a b
1    1 1
2    2 2
3    3 3
4  1_1 1
5  1_2 2
6  1_3 3
7  2_1 1
8  2_2 2
9  2_3 3
10 3_1 1
11 3_2 2
12 3_3 3

相关问题