将键值从一个数据帧转换为另一数据帧的列

时间:2018-07-05 14:42:54

标签: r plyr reshape reshape2

我已经搜索了一下,但是找不到针对我问题的特定答案。

假设我有两个数据帧:

# Desired Output
#
#  id   a   b   c    t1    t2    t3    t4    t5    t6    t7
#  1    3   25  400  0.33  0.87  NA    NA    NA    NA    NA
#  1    NA  25  800  NA    NA    0.92  0.65  0.94  0.16  NA
#  1    5   90  1200 NA    NA    NA    NA    NA    NA    0.93
#  2    3   25  400  0.98  0.54  NA    NA    NA    NA    NA
#  2    NA  25  800  NA    NA    0.84  0.16  0.84  0.02  NA
#  2    5   90  1200 NA    NA    NA    NA    NA    NA    0.18

在上面的示例中,df2有两行数据用于测试测量。 (t1 .. t7)

df1具有测试条件(a,b,c)的值,在该条件下执行测试测量(t1 .. t7)。

我正在寻找一种创建新数据框的方法,该数据框将测试条件(a,b,c)转换为列,并将它们与测试度量值组合在一起,以使结果数据框看起来像这样:

    from dateutil import parser
    example_datetime = ' 7/ 7/2001 16 14 58'
    parsed_datetime = parser.parse(example_datetime)

    print(parsed_datetime)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是一种使用gatherinner_join,然后两次调用spread的方法:

library(tidyverse)

df1 %>%
    gather(variable, value, -name) %>% #wide to long
    inner_join(df2 %>% gather(variable, value, -id), by = 'variable') %>%
    spread(name, value.x) %>% # spread first time
    spread(variable, value.y) # spread second time

  id  a  b    c   t1   t2   t3   t4   t5   t6   t7
1  1  3 25  400 0.33 0.87   NA   NA   NA   NA   NA
2  1  5 90 1200   NA   NA   NA   NA   NA   NA 0.93
3  1 NA 25  800   NA   NA 0.92 0.65 0.94 0.16   NA
4  2  3 25  400 0.98 0.54   NA   NA   NA   NA   NA
5  2  5 90 1200   NA   NA   NA   NA   NA   NA 0.18
6  2 NA 25  800   NA   NA 0.84 0.16 0.84 0.02   NA

一个接一个地逐行查看结果可能会有所帮助。这会带来很长而且很麻烦的答案,但是您应该考虑在自己的R会话中这样做。