所以我有一个名为“myData”的数据框
print(myData)
ID Name Status AGE
123 Mike Yes 18
124 John No 20
125 Lily Yes 21
126 Jasper No 24
127 Toby Yes 27
128 Will No 19
129 Oscar Yes 32
Run Code Online (Sandbox Code Playgroud)
我收到了一个更新的数据框,它更新了名为“myData2”的“状态”。这个数据框的观察比我原来的少,只有 ID 和状态。
这是更新后的数据框
print(myData2)
ID Status
123 Yes
125 Yes
126 Yes
128 No
129 No
Run Code Online (Sandbox Code Playgroud)
是否有功能可以使用列“ID”使用 myData2 中的数据更新 myData 中的“状态”列?
这是我想要的输出
ID Name Status AGE
123 Mike Yes 18
124 John No 20
125 Lily Yes 21
126 Jasper Yes 24
127 Toby Yes 27
128 Will No 19
129 Oscar No 32
Run Code Online (Sandbox Code Playgroud)
我们可以使用data.tablejoin在加入on'ID'后使用第二个值快速更新第一个数据集'Status '
library(data.table)
setDT(myData)[myData2, Status := i.Status, on = .(ID)]
myData
# ID Name Status AGE
#1: 123 Mike Yes 18
#2: 124 John No 20
#3: 125 Lily Yes 21
#4: 126 Jasper Yes 24
#5: 127 Toby Yes 27
#6: 128 Will No 19
#7: 129 Oscar No 32
Run Code Online (Sandbox Code Playgroud)
在 中dplyr,我们执行 aleft_join然后coalesce是“状态”列
library(dplyr)
myData %>%
left_join(myData2, by = 'ID') %>%
mutate(Status = coalesce(Status.y, Status.x)) %>%
select(-Status.x, -Status.y)
Run Code Online (Sandbox Code Playgroud)
myData <- structure(list(ID = 123:129, Name = c("Mike", "John", "Lily",
"Jasper", "Toby", "Will", "Oscar"), Status = c("Yes", "No", "Yes",
"No", "Yes", "No", "Yes"), AGE = c(18L, 20L, 21L, 24L, 27L, 19L,
32L)), class = "data.frame", row.names = c(NA, -7L))
myData2 <- structure(list(ID = c(123L, 125L, 126L, 128L, 129L), Status = c("Yes",
"Yes", "Yes", "No", "No")), class = "data.frame", row.names = c(NA,
-5L))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |