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)
. Если вам не нужен этот дополнительный бит метаданных, вы можете выделить этот столбец из длины данных перед выполнением строки spread(data, ScaneType, value)
.