【发布时间】:2019-06-25 20:01:01
【问题描述】:
我有多个宽格式或长格式的数据帧,我正在尝试设置一段通用代码(循环或其他),这将允许我从宽 df 中获取值并将它们插入长df。
两个数据框的截图见附件。
我想将宽 DF 中每次扫描的扫描日期转换为长 DF 中的新变量。感觉很简单,但我卡住了 - 感谢您的帮助!
【问题讨论】:
我有多个宽格式或长格式的数据帧,我正在尝试设置一段通用代码(循环或其他),这将允许我从宽 df 中获取值并将它们插入长df。
两个数据框的截图见附件。
我想将宽 DF 中每次扫描的扫描日期转换为长 DF 中的新变量。感觉很简单,但我卡住了 - 感谢您的帮助!
【问题讨论】:
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")
我相信这会奏效,但我不能确定,因为没有可重现的示例。您最终会得到一个最有可能名为“key”的额外列,它来自gather(datawide, -PID)。如果您不想要这些额外的元数据,您可以在执行 spread(data, ScaneType, value) 行之前将该列从 datalong 中子集化。
【讨论】: