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