这是我正在尝试做的一个例子。我从“宽”格式的数据框开始,如下所示。
#sample dataframe
id_1 <- c(260, 500, 640, 720)
id_2 <- c(261, 501, 641, 721)
sleep_1 <- c(7, 3, 10, 6)
sleep_2 <- c(8, 9, 1, 4)
eat_1 <- c(6,8,4,2)
eat_2 <- c(8,1,3,8)
df <- data.frame(id_1, id_2, sleep_1, sleep_2, eat_1, eat_2)
> df
id_1 id_2 sleep_1 sleep_2 eat_1 eat_2
1 260 261 7 8 6 8
2 500 501 3 9 8 1
3 640 641 10 1 4 3
4 720 721 6 4 2 8
5 801 NA 8 NA 5 NA
6 440 441 4 9 3 6
我们可以将 id_1 和 id_2 视为表示一对兄弟姐妹,其中 260、261 是一对,500、501 是一对等。我想将此数据帧转换为“长”格式,如下所示。这样做时,我还希望能够处理仅存在该对中的一个成员(例如 801)并且相应的兄弟姐妹为 NA 的情况(如上所示)。
id sleep eat
1 260 7 6
2 261 8 8
3 500 3 8
4 501 9 1
5 640 10 4
6 641 1 3
7 720 6 2
8 721 4 8
9 801 8 5
10 440 4 3
11 441 9 6
此代码可能可以解决您的问题:
library(tidyverse)
id1 <- df %>%
select(ends_with("1"))
colnames(id1) <- c("id", "sleep", "eat")
id2 <- df %>%
select(ends_with("2"))
colnames(id2) <- c("id", "sleep", "eat")
df <- id1 %>% bind_rows(id2)
df
id sleep eat
1 260 7 6
2 500 3 8
3 640 10 4
4 720 6 2
5 261 8 8
6 501 9 1
7 641 1 3
8 721 4 8