給定df1,我需要根據 TRIP 列給出的值擴展相同數量的行。例如,我放了兩列,但在現實生活中,它是一個超過 15 列的資料框。如何從 Trip 列中記錄的值展開所有記錄?
*df1*
Id Trip
1 3
2 2
3 2
4 4
Expected Result
*df1*
Id Trip
1 1
1 2
1 3
2 1
2 2
3 1
3 2
4 1
4 2
4 3
4 4
uj5u.com熱心網友回復:
我們可以先uncount在“Trip”列上復制行,然后將“Trip”轉換為按“Id”分組的序列
library(dplyr)
library(tidyr)
df1 %>%
uncount(Trip, .remove = FALSE) %>%
group_by(Id) %>%
mutate(Trip = row_number()) %>%
ungroup
-輸出
# A tibble: 11 × 2
Id Trip
<int> <int>
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 1
7 3 2
8 4 1
9 4 2
10 4 3
11 4 4
或者另一種選擇是首先將“Trip”轉換為 alist和unnest串列列中的序列
library(purrr)
df1 %>%
mutate(Trip = map(Trip, seq_len)) %>%
unnest(Trip)
-輸出
# A tibble: 11 × 2
Id Trip
<int> <int>
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 1
7 3 2
8 4 1
9 4 2
10 4 3
11 4 4
資料
df1 <- structure(list(Id = 1:4, Trip = c(3L, 2L, 2L, 4L)),
class = "data.frame", row.names = c(NA,
-4L))
uj5u.com熱心網友回復:
還有一個dplyr單獨的選擇是:
library(dplyr)
df1 %>%
group_by(Id) %>%
summarise(cur_data()[seq(Trip),]) %>%
mutate(Trip = row_number())
Id Trip
<int> <int>
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 1
7 3 2
8 4 1
9 4 2
10 4 3
11 4 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520919.html
標籤:r
