将行转置为相应的列
Transpose Rows into Corresponding Columns
我有一个示例数据集,其中包含相应的事件,例如按 ID 列出的“开始”和“结束”日期。但是,数据不是很干净。用相应的事件在 r 中重塑此 table 的最佳方法是什么?我尝试在 dplyr 和 reshape 中执行此操作,但它没有用,所以我认为采用“下一个”行的值可能会起作用。我不确定这是正确的方法。例如,数据当前的样子如下:
ID Event Date
1 Enter 1/1/2021
1 Leave 1/5/2021
2 Enter 5/4/2021
2 Leave 5/30/2021
2 Enter 6/2/2021
2 Leave 6/5/2021
期望的输出:
ID Enter_Date Leave_Date
1 1/1/2021 1/5/2021
2 5/4/2021 5/30/2021
2 6/2/2021 6/5/2021
这是一个示例数据集:
ID <- c(1,1,2,2,2,2)
Event <- c("Enter", "Leave", "Enter", "Leave", "Enter", "Leave")
Date <- c("1/1/2021", "1/5/2021", "5/4/2021", "5/30/2021",
"6/2/2021", "6/5/2021")
df <- data.frame(ID, Event, Date)
您需要创建一个列来区分最终输出中的每一行。如果您的数据遵循与您的示例相同的模式,您可以为每两行或为 Event == 'Enter'
.
的每个值创建一个新行
library(dplyr)
library(tidyr)
df %>%
mutate(index_row = cumsum(Event == 'Enter')) %>%
pivot_wider(names_from = Event, values_from = Date) %>%
select(-index_row)
# ID Enter Leave
# <dbl> <chr> <chr>
#1 1 1/1/2021 1/5/2021
#2 2 5/4/2021 5/30/2021
#3 2 6/2/2021 6/5/2021
我有一个示例数据集,其中包含相应的事件,例如按 ID 列出的“开始”和“结束”日期。但是,数据不是很干净。用相应的事件在 r 中重塑此 table 的最佳方法是什么?我尝试在 dplyr 和 reshape 中执行此操作,但它没有用,所以我认为采用“下一个”行的值可能会起作用。我不确定这是正确的方法。例如,数据当前的样子如下:
ID Event Date
1 Enter 1/1/2021
1 Leave 1/5/2021
2 Enter 5/4/2021
2 Leave 5/30/2021
2 Enter 6/2/2021
2 Leave 6/5/2021
期望的输出:
ID Enter_Date Leave_Date
1 1/1/2021 1/5/2021
2 5/4/2021 5/30/2021
2 6/2/2021 6/5/2021
这是一个示例数据集:
ID <- c(1,1,2,2,2,2)
Event <- c("Enter", "Leave", "Enter", "Leave", "Enter", "Leave")
Date <- c("1/1/2021", "1/5/2021", "5/4/2021", "5/30/2021",
"6/2/2021", "6/5/2021")
df <- data.frame(ID, Event, Date)
您需要创建一个列来区分最终输出中的每一行。如果您的数据遵循与您的示例相同的模式,您可以为每两行或为 Event == 'Enter'
.
library(dplyr)
library(tidyr)
df %>%
mutate(index_row = cumsum(Event == 'Enter')) %>%
pivot_wider(names_from = Event, values_from = Date) %>%
select(-index_row)
# ID Enter Leave
# <dbl> <chr> <chr>
#1 1 1/1/2021 1/5/2021
#2 2 5/4/2021 5/30/2021
#3 2 6/2/2021 6/5/2021