我已经搜索了一下,但是找不到针对我问题的特定答案。
假设我有两个数据帧:
# 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)
感谢您的帮助!
答案 0 :(得分:1)
这是一种使用gather
,inner_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
会话中这样做。