数据结构:基于观察的行到基于 dyad 成员的行
Data structure: Observation-based rows to dyad member-based rows
比如现在的数据结构(根据实际观察)是这样的:
structure(list(dyad_id = c(2, 2, 3), partner1_id = c(567, 478,
444), partner2_id = c(478, 567, 333), partner1_personality = c(5,
3, 4), partner2_personality = c(3, 5, 2)), class = "data.frame", row.names = c(NA,
-3L), variable.labels = structure(character(0), .Names = character(0)), codepage = 65001L)
视觉上看起来像:
╔═════════╦═════════════╦═════════════╦══════════════════════╦══════════════════════╗
║ dyad_id ║ partner1_id ║ partner2_id ║ partner1_personality ║ partner2_personality ║
╠═════════╬═════════════╬═════════════╬══════════════════════╬══════════════════════╣
║ 2 ║ 567 ║ 478 ║ 5 ║ 3 ║
╠═════════╬═════════════╬═════════════╬══════════════════════╬══════════════════════╣
║ 2 ║ 478 ║ 567 ║ 3 ║ 5 ║
╠═════════╬═════════════╬═════════════╬══════════════════════╬══════════════════════╣
║ 3 ║ 444 ║ 333 ║ 4 ║ 2 ║
╚═════════╩═════════════╩═════════════╩══════════════════════╩══════════════════════╝
的目标是将其转换成基于成员的(即每个二元体[2行] =23=]):
╔═════════╦════════════╦═════════════════════╗
║ dyad_id ║ partner_id ║ partner_personality ║
╠═════════╬════════════╬═════════════════════╣
║ 2 ║ 567 ║ 5 ║
╠═════════╬════════════╬═════════════════════╣
║ 2 ║ 478 ║ 3 ║
╠═════════╬════════════╬═════════════════════╣
║ 3 ║ 444 ║ 4 ║
╠═════════╬════════════╬═════════════════════╣
║ 3 ║ 333 ║ 2 ║
╚═════════╩════════════╩═════════════════════╝
我们可以使用pivot_longer
library(dplyr)
library(tidyr)
library(stringr)
df1 %>%
pivot_longer(cols = -dyad_id, names_to = c('grp', ".value"),
names_sep = "_") %>%
select(-grp) %>%
distinct %>%
rename_at(vars(-dyad_id), ~ str_c('partner_', .))
-输出
# A tibble: 4 x 3
# dyad_id partner_id partner_personality
# <dbl> <dbl> <dbl>
#1 2 567 5
#2 2 478 3
#3 3 444 4
#4 3 333 2
比如现在的数据结构(根据实际观察)是这样的:
structure(list(dyad_id = c(2, 2, 3), partner1_id = c(567, 478,
444), partner2_id = c(478, 567, 333), partner1_personality = c(5,
3, 4), partner2_personality = c(3, 5, 2)), class = "data.frame", row.names = c(NA,
-3L), variable.labels = structure(character(0), .Names = character(0)), codepage = 65001L)
视觉上看起来像:
╔═════════╦═════════════╦═════════════╦══════════════════════╦══════════════════════╗
║ dyad_id ║ partner1_id ║ partner2_id ║ partner1_personality ║ partner2_personality ║
╠═════════╬═════════════╬═════════════╬══════════════════════╬══════════════════════╣
║ 2 ║ 567 ║ 478 ║ 5 ║ 3 ║
╠═════════╬═════════════╬═════════════╬══════════════════════╬══════════════════════╣
║ 2 ║ 478 ║ 567 ║ 3 ║ 5 ║
╠═════════╬═════════════╬═════════════╬══════════════════════╬══════════════════════╣
║ 3 ║ 444 ║ 333 ║ 4 ║ 2 ║
╚═════════╩═════════════╩═════════════╩══════════════════════╩══════════════════════╝
的目标是将其转换成基于成员的(即每个二元体[2行] =23=]):
╔═════════╦════════════╦═════════════════════╗
║ dyad_id ║ partner_id ║ partner_personality ║
╠═════════╬════════════╬═════════════════════╣
║ 2 ║ 567 ║ 5 ║
╠═════════╬════════════╬═════════════════════╣
║ 2 ║ 478 ║ 3 ║
╠═════════╬════════════╬═════════════════════╣
║ 3 ║ 444 ║ 4 ║
╠═════════╬════════════╬═════════════════════╣
║ 3 ║ 333 ║ 2 ║
╚═════════╩════════════╩═════════════════════╝
我们可以使用pivot_longer
library(dplyr)
library(tidyr)
library(stringr)
df1 %>%
pivot_longer(cols = -dyad_id, names_to = c('grp', ".value"),
names_sep = "_") %>%
select(-grp) %>%
distinct %>%
rename_at(vars(-dyad_id), ~ str_c('partner_', .))
-输出
# A tibble: 4 x 3
# dyad_id partner_id partner_personality
# <dbl> <dbl> <dbl>
#1 2 567 5
#2 2 478 3
#3 3 444 4
#4 3 333 2