1
我在R的工作。我有4个数据帧,我试图总结成一个新的数据框。基本上4个起始帧都有rownames,它们是唯一的标识符(其余都有关于标识符的数据)。存在重叠的可能性,即,ID可能出现在四个表中的一个以上。R - 在数据框上的Upsert
我试图建立一个与以下格式的数据帧:
ID-DATASET1-DATASET2-DATASET3-DATASET4
"1"-FALSE-FALSE-TRUE-TRUE
这基本上说,ID 1出现在数据集3和4。所以我们的目标是要拿出每一个ID的布尔矢量,它告诉我们发现了哪些数据集。我有四个数据集作为数据框,rownames是ID。因为我将迭代地构建最终的数据框(称为vectorTable),所以我将它初始化为一个空的数据框。我已经开始在一个函数,它会做如下因素的工作:
- 检查的ID是在向量表
- 如果是更新正确的布尔值
- 否则,建立一个新的布尔矢量,并将其添加
这里是该功能的代码:
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)
}
}
这是我试图让这个工作,从一个数据集表开始。
idVectorization <- data.frame(id=character(), ds1=logical(), ds2=logical(), ds3=logical(), ds4=logical())
# two for ds1 since there is an id column
lapply(row.names(ds1), mapIdToVector, idVectorization, 2)
问题是vectorTable没有得到更新。我不知道这是rbind()还是带引用/值传递的问题。任何提示如何让这个工作将非常感激!
工作得很好!谢谢 – mbiokyle