将值从宽数据帧添加到长数据帧

时间:2019-06-25 20:01:01

标签: r dplyr

我有多个宽格式或长格式的数据帧,并且我正在尝试设置通用代码段(循环或其他代码),以使我能够从宽df中获取值并将其插入长df。

有关两个数据框的屏幕截图,请参见附件。

long DF image wide DF image

我想将宽DF中每次扫描的扫描日期转换为长DF中的新变量。感觉很简单,但我遇到了麻烦-感谢您的协助!

1 个答案:

答案 0 :(得分:0)

library(tidyr)
library(stringr)
datalong <- gather(datawide, -PID)
datalong$ScanType <- ifelse(str_detect(as.character(datalong$key), "date"), "scan_date","scan_name")
datalong <- spread(datalong, ScanType, value)
#Merge with other long dataframe
NewLong <- merge(oldLong, datalong, by = c("PID","scan_name")

我相信这会起作用,但是我不确定,因为没有可复制的示例。最后,您将获得一个额外的列,该列很可能来自gather(datawide, -PID),名为“ key”。如果您不希望多余的元数据,则可以在执行spread(data, ScaneType, value)行之前从datalong子集中该列。