【发布时间】:2017-11-13 11:35:16
【问题描述】:
我有两个数据框。 Df1 是主要的,Df2 是更新的。我试图从 df2 到 df1 获得价值,但我所做的任何事情对我来说似乎都不起作用。匹配/合并给出了 NA,并且所有类型的连接命令也不起作用。
V1 <- c("AB1002017103", "AB1002017103", "AB1002017103"
,"AB1002017104"
,"AB1002017105"
,"AB1002017106"
,"AB1002017107"
,"AB1002017108"
,"AB1002017109"
,"AB1002017111")
V2 <- c(249,242,253,211,264,237,291,286,232,0)
df1 <- data.frame(V1,V2)
df1$V1 <- as.character(as.factor(df1$V1))
V1 <- c("AB1002017111"); V2 <- 165
df2 <- data.frame(V1,V2)
df2$V1 <- as.character(as.factor(df2$V1))
输出应该全部来自 df1,最后一个值为 165。请问有什么想法吗?我使用的匹配示例:
df1$V2 <- df2$V2[match(df1$V1,df2$V1)]
【问题讨论】:
-
默认情况下,如果没有匹配,
match返回 NA,使用nomatch = 0并在 lhs 上执行相同的索引,即df1$V2[match(df2$V1,df1$V1)] <- df2$V2[match(df1$V1,df2$V1, nomatch = 0)] -
谢谢。它在我的简单示例中就像魔术一样工作,但是当我用于整个数据集时,它会给出错误“下标分配中不允许使用 NA”。知道为什么吗?检查 str 和比较值,似乎与 V1 相同。
-
正如我提到的,您需要
nomatch=0。长度是否相同,即两个match。请检查每场比赛的输出。 -
我已将 nomatch 设置为 0,但仍然没有运气。在我原来的例子中,长度也不同,不是吗?在这里,我有 597 行的 df1 和 2308 行的 df2,但是 197 行的 V1 长度相同。 Df1 的 V2 为 0,而 df2 的 V2 正确,我想复制到 df1。我需要像excel中的vlookup这样的东西。附言如何检查每场比赛的输出?
-
我的意思是输入
match(df2$V1,df1$V1)和match(df1$V1,df2$V1, nomatch = 0)检查第一种情况是否有NA,非零元素的长度是否相同
标签: r