R-在数据帧上插入
我在R工作。我有4个数据帧,其中的数据我试图汇总成一个新的数据帧。基本上,4个起始帧的行名都是唯一标识符(其余帧都有关于标识符的数据)。可能存在重叠,即ID可能出现在四个表中的多个表中 我正在尝试使用以下格式构建数据帧:R-在数据帧上插入,r,R,我在R工作。我有4个数据帧,其中的数据我试图汇总成一个新的数据帧。基本上,4个起始帧的行名都是唯一标识符(其余帧都有关于标识符的数据)。可能存在重叠,即ID可能出现在四个表中的多个表中 我正在尝试使用以下格式构建数据帧: ID-DATASET1-DATASET2-DATASET3-DATASET4 "1"-FALSE-FALSE-TRUE-TRUE 基本上这表示ID1出现在数据集3和4中。因此,我们的目标是为每个ID提供一个布尔向量,它告诉我们在哪些数据集中找到了它。我有四个数据集作为数据帧,
ID-DATASET1-DATASET2-DATASET3-DATASET4
"1"-FALSE-FALSE-TRUE-TRUE
基本上这表示ID1出现在数据集3和4中。因此,我们的目标是为每个ID提供一个布尔向量,它告诉我们在哪些数据集中找到了它。我有四个数据集作为数据帧,行名是ID。由于我将以迭代方式构建最终的数据帧(称之为vectorTable),因此我将其初始化为空数据帧。我已开始编写一个函数,该函数将执行以下操作:
- 如果是,请更新正确的布尔值
mapIdToVector <- function(id, vectorTable, dataIdx) {
if(id %in% vectorTable$id) {
vectorTable[test$id == id][dataIdx] = TRUE
} else {
# create a vector for the row
row <- c(id, FALSE, FALSE, FALSE, FALSE)
row[idx] = TRUE
rbind(vectorTable, row)
}
}
mapIdToVector以下是我的方法
由于您没有提供数据,以下是一些:
a <- data.frame(ID = letters[1:3])
b <- data.frame(ID = letters[3:6])
d <- data.frame(ID = letters[6:9])
e <- data.frame(ID = letters[9:12])
a <- data.frame(ID = letters[1:3])
b <- data.frame(ID = letters[3:6])
d <- data.frame(ID = letters[6:9])
e <- data.frame(ID = letters[9:12])
datlist <- list(a,b,d,e)
allids <- unique(unlist(sapply(datlist, function(x) as.character(x[["ID"]]))))
t(sapply(allids, function(x) sapply(datlist, function(y) x %in% y[["ID"]])))
[,1] [,2] [,3] [,4]
a TRUE FALSE FALSE FALSE
b TRUE FALSE FALSE FALSE
c TRUE TRUE FALSE FALSE
d FALSE TRUE FALSE FALSE
e FALSE TRUE FALSE FALSE
f FALSE TRUE TRUE FALSE
g FALSE FALSE TRUE FALSE
h FALSE FALSE TRUE FALSE
i FALSE FALSE TRUE TRUE
j FALSE FALSE FALSE TRUE
k FALSE FALSE FALSE TRUE
l FALSE FALSE FALSE TRUE