gpt4 book ai didi

用 ID 替换来自另一个数据帧的值

转载 作者:行者123 更新时间:2023-12-04 10:34:18 24 4
gpt4 key购买 nike

我有两个数据框::

as1 <- data.frame(ID = c(1,2,3,4,5,6),
pID = c(21,22,23,24,25,26),
Values = c(435,33,45,NA, NA,12))
as2 <- data.frame(ID = c(4,5),
pid = c(24,25),
Values = c(544, 676))

我需要通过匹配 ID 和 pID 将 as1 中的 NA 值替换为 as2 中的值

我需要将结果数据框作为:
  resultdf
ID pID Values
1 1 21 435
2 2 22 33
3 3 23 45
4 4 24 544
5 5 25 676
6 6 26 12

我尝试做子集然后 na.omit()然后 rbind ing...但我正在丢失索引。

最佳答案

这是两个基本的 R 解决方案。

首先,使用 match在“ID”中选择as1中“Value”的元素填写:

as1$Values[match(as2$ID, as1$ID)] <- as2$Values

as1
ID pID Values
1 1 21 435
2 2 22 33
3 3 23 45
4 4 24 544
5 5 25 676
6 6 26 12

这仅在 ID 是两个数据集的真实 ID 时才有效(即 pid 是“不相关的”)。其次,如果还需要pid,可以使用 merge然后“折叠”两个值列,如下所示:
df <- merge(as1, as2, by.x=c("ID", "pID"), by.y=c("ID", "pid"), all=TRUE)

这将生成一个带有两个值列的四列数据框。使用 ifelse 将这些折叠成一列:
df <- cbind(df[c(1,2)], "Values"=with(df, ifelse(is.na(Values.y), Values.x, Values.y)))

df
ID pID Values
1 1 21 435
2 2 22 33
3 3 23 45
4 4 24 544
5 5 25 676
6 6 26 12

关于用 ID 替换来自另一个数据帧的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40177132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com