gpt4 book ai didi

r - 如果满足多个条件,则将值从一个数据帧复制到另一个数据帧 (R)

转载 作者:行者123 更新时间:2023-12-05 03:16:28 25 4
gpt4 key购买 nike

我有两个数据框:

DF1<-data.frame(VAR1 = c(1,1,1,1,2,2,2,2,3,3,3,3),
VAR2 = c('John','Bob','Hannah'), VAR3 = c(1,1,1,2),
VAR4=NA)

DF2<-data.frame(VAR1 = c(1,1,1,1,2,2,2,2,3,3,3,3),
VAR2 = c('John','Bob','Hannah','Dave'),
VAR4 = c('A','B','C'))

我想将 DF2$VAR4 复制到 DF1$VAR4,对于满足条件 (DF1$VAR1==DF2$VAR1)&(DF1$VAR2==DF2$VAR2) 的每一行,因此无论值如何DF1$VAR3 需要。 DF2$VAR4 每对 (VAR1, VAR2) 只有一个元素,而 DF1 没有。事实上,DF1$VAR3 计算每对 (DF1$VAR1, DF1$VAR2) 的出现次数。

我试过了(来自另一个话题)

DF3<-merge(DF1, DF2[,'VAR4'], by= c('VAR1','VAR2'))

哪个应该解决这个问题,但我得到:“fix.by(by.y,y) 中的错误:'by' 必须指定一个唯一有效的列”

我检查了多次但没有拼写错误,并且 VAR1 和 VAR2 都存在于两个数据框中,并且标题一致。我不知道我在这里错过了什么。

我对 R 语法非常陌生,所以我用嵌套循环解决了它:

for (i in DF1$VAR1){
for (j in DF1$VAR2[DF1$VAR1==i]){
DF1$VAR4[DF1$VAR1==i & DF1$VAR2==j] <- DF2$VAR4[DF2$VAR1==i & DF2$VAR2==j]
}
}

虽然有效,但速度极慢。我很确定解决方案很简单,但我无法解决。非常感谢您的宝贵时间

最佳答案

我们可以使用 dplyr 中的 rows_update(实验性):

library(dplyr)

DF1 |>
rows_update(DF2, by = c("VAR1", "VAR2"), unmatched = "ignore")

输出:

   VAR1   VAR2 VAR3 VAR4
1 1 John 1 A
2 1 Bob 1 B
3 1 Hannah 1 C
4 1 John 2 A
5 2 Bob 1 C
6 2 Hannah 1 A
7 2 John 1 B
8 2 Bob 2 C
9 3 Hannah 1 B
10 3 John 1 C
11 3 Bob 1 A
12 3 Hannah 2 B

关于r - 如果满足多个条件,则将值从一个数据帧复制到另一个数据帧 (R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74630290/

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