【发布时间】:2021-01-31 11:36:49
【问题描述】:
在这里,我与您分享我的问题的简化版本。假设我对两个变量有 6 个观察值 (pid):
pid <- c(1,2,3,4,5,6)
V1 <- c(11,11,33,11,22,33)
V2 <- c("A", "C", "M", "M", "A", "A")
data <- data.frame(pid, V1, V2)
# pid V1 V2
# 1 1 11 A
# 2 2 11 C
# 3 3 33 M
# 4 4 11 M
# 5 5 22 A
# 6 6 33 A
我想根据与我拥有的 V1 和 V2 的不同组合关联的值创建一个新列,这些值存储在第二个数据库中:
V1 <- c(11,11,11,22,22,22,33,33,33)
V2 <- c("A", "C", "M","A", "C", "M","A", "C", "M")
valueA <- c(16,26,36,46,56,66,76,86,96)
valueB <- c(15,25,35,45,55,65,75,85,95)
values <- data.frame(V1, V2, valueA, valueB)
# V1 V2 valueA valueB
# 1 11 A 16 15
# 2 11 C 26 25
# 3 11 M 36 35
# 4 22 A 46 45
# 5 22 C 56 55
# 6 22 M 66 65
# 7 33 A 76 75
# 8 33 C 86 85
# 9 33 M 96 95
我按照@akrun 的建议尝试了这个:
data <- mutate (data,
valueA = as.integer (ifelse(data$V1 %in% values$V1
& data$V2 %in% values$V2, values$valueA, NA))
)
但结果如下:
# pid V1 V2 valueA
# 1 1 11 A 16
# 2 2 11 C 26
# 3 3 33 M 36
# 4 4 11 M 46
# 5 5 22 A 56
# 6 6 33 A 66
如您所见,33 M 的组合是 36 而应该是 96...
我想存档:
# pid V1 V2 valueA
# 1 1 11 A 16
# 2 2 11 C 26
# 3 3 33 M 96
# 4 4 11 M 36
# 5 5 22 A 46
# 6 6 33 A 76
关于如何解决这个问题的任何建议?任何帮助我都会非常感激!
【问题讨论】:
-
也许你想要
%in%而不是==,即mutate (data, valueA = as.integer (ifelse(data$V1 %in% values$V1 & data$V2 %in% values$V2, values$valueA, NA)) ),或者它是一个简单的连接操作,即left_join(data, values) -
@akrun 感谢您的回复!不幸的是,代码仍然无法按我的意愿工作......请查看问题中的编辑以获得完整的解释
标签: r if-statement logic multiple-conditions