重复行的R-dplyr映射切片
我很难把切片和地图结合起来 我对做类似的事情感兴趣;在我的例子中,就是将一个紧凑的person-period文件转换为一个长的连续person-period文件。但是,由于我的文件太大,我需要先拆分数据 我的数据是这样的重复行的R-dplyr映射切片,r,split,dplyr,R,Split,Dplyr,我很难把切片和地图结合起来 我对做类似的事情感兴趣;在我的例子中,就是将一个紧凑的person-period文件转换为一个长的连续person-period文件。但是,由于我的文件太大,我需要先拆分数据 我的数据是这样的 group id var ep dur 1 A 1 a 1 20 2 A 1 b 2 10 3 A 1 a 3 5 4 A 2 b 1 5 5 A 2 b 2 10
group id var ep dur
1 A 1 a 1 20
2 A 1 b 2 10
3 A 1 a 3 5
4 A 2 b 1 5
5 A 2 b 2 10
6 A 2 b 3 15
7 B 1 a 1 20
8 B 1 a 2 10
9 B 1 a 3 10
10 B 2 c 1 20
11 B 2 c 2 5
12 B 2 c 3 10
我所需要的只是这个答案
不过,我有兴趣介绍一个拆分的。$组
我该怎么做呢
dt %>% split(.$group) %>% map_df(slice(rep(1:n(),.$dur)))
例如,它不起作用
我所需的输出与dt%>%slicerep1:n、.$dur相同
那是
group id var ep dur
1 A 1 a 1 20
2 A 1 a 1 20
3 A 1 a 1 20
4 A 1 a 1 20
5 A 1 a 1 20
6 A 1 a 1 20
7 A 1 a 1 20
8 A 1 a 1 20
9 A 1 a 1 20
10 A 1 a 1 20
.....
但我需要拆分此操作,因为文件太大
资料
map有两个参数:一个是.x中的向量/列表,另一个是.f中的函数。然后将.f应用于.x中的所有元素
传递给映射的函数格式不正确。试试这个:
f <- function(x) x %>% slice(rep(1:n(), .$dur))
dt %>%
split(.$group) %>%
map_df(f)
这一次,您直接将slice函数传递给带有附加参数的map。map接受两个参数:在.x中的vector/list和在.f中的函数。然后将.f应用于.x中的所有元素
传递给映射的函数格式不正确。试试这个:
f <- function(x) x %>% slice(rep(1:n(), .$dur))
dt %>%
split(.$group) %>%
map_df(f)
这一次,您可以直接传递slice函数来映射其他参数。我不太确定您想要的最终输出是什么,但是您可以使用tidyr嵌套您想要重复的数据,并使用一个简单的函数来扩展嵌套数据的级别,这与Tutuchan的答案非常类似
expand_df <- function(df, repeats) {
df %>% slice(rep(1:n(), repeats))
}
dt %>%
tidyr::nest(var:ep) %>%
mutate(expanded = purrr::map2(data, dur, expand_df)) %>%
select(-data) %>%
tidyr::unnest()
Tutuchan的回答给出了与您最初的方法完全相同的输出-这就是您想要的吗?我不知道它是否比您原来的方法有任何优势。我不太确定您想要的最终输出是什么,但是您可以使用tidyr嵌套您想要重复的数据,并使用一个简单的函数来扩展嵌套数据的级别,这与Tutuchan的答案非常类似
expand_df <- function(df, repeats) {
df %>% slice(rep(1:n(), repeats))
}
dt %>%
tidyr::nest(var:ep) %>%
mutate(expanded = purrr::map2(data, dur, expand_df)) %>%
select(-data) %>%
tidyr::unnest()
Tutuchan的回答给出了与您最初的方法完全相同的输出-这就是您想要的吗?我不知道它是否比您原来的方法有任何优势。我不清楚OP期望的输出是什么,尽管我还没有投票表决it@hrbrmstr我认为这与链接帖子中的内容是一样的,我不清楚OP的预期输出是什么,尽管我还没有投票it@hrbrmstr我认为这与链接中的相同邮递
expand_df <- function(df, repeats) {
df %>% slice(rep(1:n(), repeats))
}
dt %>%
tidyr::nest(var:ep) %>%
mutate(expanded = purrr::map2(data, dur, expand_df)) %>%
select(-data) %>%
tidyr::unnest()