Dplyr:如何根据整数序列(1:3)重复每一行
我正在办理登记册(关于比利时的例子):
country<- c("belg")
country <- as.data.frame(country)
该注册包含3页:
library(dplyr)
country2 <- country %>%
slice(rep(1:n(), each=3)) %>%
mutate(pages = row_number())
我的输出:
country page
belg 1
belg 2
belg 3
预期结果: 每个Register'pages包含三行(基于整数序列(1:3)重复每一行)
country page row_id
belg 1 1
belg 1 2
belg 1 3
belg 2 1
belg 2 2
belg 2 3
...
我尝试了什么:
将此添加到我的dplyr管道中:
%>%
group_by(pages) %>%
mutate(row_id = seq(1:3)) %>%
ungroup()
答案 0 :(得分:6)
您可以创建一个包含1:3的列表列,然后将其删除:
library(dplyr); library(tidyr)
df %>% mutate(row_id = list(seq_len(3))) %>% unnest()
# country page row_id
#1 belg 1 1
#2 belg 1 2
#3 belg 1 3
#4 belg 2 1
#5 belg 2 2
#6 belg 2 3
#7 belg 3 1
#8 belg 3 2
#9 belg 3 3
dput(df)
structure(list(country = structure(c(1L, 1L, 1L), .Label = "belg", class = "factor"),
page = 1:3), .Names = c("country", "page"), class = "data.frame", row.names = c(NA,
-3L))
答案 1 :(得分:1)
另一种选择是将paste
作为字符串,然后使用separate_rows
拆分行
library(tidyverse)
df %>%
mutate(row_id = toString(seq_len(3))) %>%
separate_rows(row_id)
# country page row_id
#1 belg 1 1
#2 belg 1 2
#3 belg 1 3
#4 belg 2 1
#5 belg 2 2
#6 belg 2 3
#7 belg 3 1
#8 belg 3 2
#9 belg 3 3