【问题标题】:Data structure: Observation-based rows to dyad member-based rows数据结构:基于观察的行到基于 dyad 成员的行
【发布时间】:2021-05-08 06:57:05
【问题描述】:

例如,当前的数据结构(根据实际观察)是这样的:

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          ║
╚═════════╩═════════════╩═════════════╩══════════════════════╩══════════════════════╝

目标是将其转换为基于成员的目标(即每个 dyad 2 行):

╔═════════╦════════════╦═════════════════════╗
║ dyad_id ║ partner_id ║ partner_personality ║
╠═════════╬════════════╬═════════════════════╣
║    2    ║     567    ║          5          ║
╠═════════╬════════════╬═════════════════════╣
║    2    ║     478    ║          3          ║
╠═════════╬════════════╬═════════════════════╣
║    3    ║     444    ║          4          ║
╠═════════╬════════════╬═════════════════════╣
║    3    ║     333    ║          2          ║
╚═════════╩════════════╩═════════════════════╝

【问题讨论】:

    标签: r dplyr tidyr data-wrangling


    【解决方案1】:

    我们可以使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-26
      • 2012-11-12
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多