这里有一个选项
data.table
.
dcast
library(data.table)
setDT(Subject)[dcast(setDT(TypeList), ID ~ paste0("Type", Type),
function(x) as.logical(length(x))), on = .(ID)]
# ID Var1 Var2 TypeA TypeB TypeC
#1: 1 0.4 0.3 TRUE TRUE TRUE
#2: 2 0.4 0.1 FALSE FALSE TRUE
#3: 3 0.2 0.2 TRUE TRUE FALSE
#4: 4 0.3 0.7 FALSE FALSE TRUE
或使用
merge
base R
merge(`row.names<-`(Subject, Subject$ID), table(TypeList) > 0, by = "row.names")[-1]
# ID Var1 Var2 A B C
#1 1 0.4 0.3 TRUE TRUE TRUE
#2 2 0.4 0.1 FALSE FALSE TRUE
#3 3 0.2 0.2 TRUE TRUE FALSE
#4 4 0.3 0.7 FALSE FALSE TRUE