【问题标题】:Split 1 long column into 2 shorter, which ref the 2 columns of another table将 1 个长列拆分为 2 个较短的列,引用另一个表的 2 个列
【发布时间】:2021-02-17 00:47:27
【问题描述】:

请帮助指导我如何在 R 中编码。谢谢

表 1 原文

Nation index
USA 1.2
ENG 0.9
FRC 2
RUS 1.5

然后引用表 2 中的 Group1 和 Group 2 列

Group1 Group2 Pop Pop
USA ENG 1000 502
RUS FRC 1200 200

这样实现表1

Group1 Group2 Index G1 Index 2
USA ENG 1.2 0.9
RUS FRC 1.5 2

【问题讨论】:

  • 您好,我注意到您到目前为止已经提出了 6 个问题,但没有接受任何问题。请考虑从每个问题中接受一个最适合您的情况的答案。每个帖子您只能接受一个答案,但可以随心所欲地投票。可以参考stackoverflow.com/help/someone-answers

标签: r split tibble


【解决方案1】:

您可以尝试以下方法:

library(tidyverse)

df1 <- tribble(~Nation, ~index,
"USA",  1.2,
"ENG",  0.9,
"FRC",  2,
"RUS",  1.5)

df2 <- tribble(~Group1, ~Group2, ~Pop1, ~Pop2,
"USA",  "ENG",  1000,   502,
"RUS",  "FRC",  1200,   200)

df2 %>% left_join(df1, by = c("Group1" = "Nation")) %>%
  select(-Pop1, -Pop2) %>%
  left_join(df1, by = c("Group2" = "Nation")) %>% 
  rename(`Index G1` = index.x, `Index G2` = index.y)

# A tibble: 2 x 4
  Group1 Group2 `Index G1` `Index G2`
  <chr>  <chr>       <dbl>      <dbl>
1 USA    ENG           1.2        0.9
2 RUS    FRC           1.5        2  

【讨论】:

    【解决方案2】:

    您可以将第二个数据集重塑为长格式,将其与第一个数据集连接起来,然后以宽格式恢复。使用@nyk 的数据:

    library(dplyr)
    library(tidyr)
    
    df2 %>%
      pivot_longer(cols = starts_with('Group'), values_to = 'Nation') %>%
      left_join(df1, by = 'Nation') %>%
      pivot_wider(names_from = name, values_from = c(Nation, index))
    
    #   Pop1  Pop2 Nation_Group1 Nation_Group2 index_Group1 index_Group2
    #  <dbl> <dbl> <chr>         <chr>                <dbl>        <dbl>
    #1  1000   502 USA           ENG                    1.2          0.9
    #2  1200   200 RUS           FRC                    1.5          2  
    

    如果您在最终输出中不需要Pop 列,您可以添加select(-starts_with('Pop'))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 2022-12-15
      相关资源
      最近更新 更多