R 合并来自不同数据帧的列
我有个问题 我有两个数据帧R 合并来自不同数据帧的列,r,join,merge,dataframe,R,Join,Merge,Dataframe,我有个问题 我有两个数据帧 >anna1 name from to result 11 66607 66841 0 11 66846 67048 0 11 67053 67404 0 11 67409 68216 0 11 68221 68786 0 1
>anna1
name from to result
11 66607 66841 0
11 66846 67048 0
11 67053 67404 0
11 67409 68216 0
11 68221 68786 0
11 68791 69020 0
11 69025 69289 0
11 69294 70167 0
11 70172 70560 0
第二个数据帧是
>anna2
name from to result
11 66607 66841 5
11 66846 67048 6
11 67409 68216 7
11 69025 69289 12
11 70172 70560 45
我想要的是创建一个与anna1类似的新数据帧,其中所有0值都将被anna2中正确行中的正确结果替换
您将注意到,在anna2数据框中,from和to列中只有一些值与anna1数据框中的相应值相同
……中间产物不见了
所以我需要从anna2中的result列中获取数字,并将它们放在anna1中的正确行中
先谢谢你
致意
Anna如果保证“from”列在anna1和anna2中都是唯一的,并且anna2中的每一行在anna1中都有一个匹配的行(尽管不是相反),则可以使用简单的解决方案
row.index = function(d) which(anna1$from == d)[1]
indices = sapply(anna2$from, row.index)
anna1$result[indices] = anna2$result
您可以使用
merge
,但必须明确指定对两个result
列应执行的操作
d <- merge(anna1, anna2, by=c("name", "from", "to"), all=TRUE)
d$result <- ifelse(d$result.x == 0 & !is.na( d$result.y ), d$result.y, d$result.x)
d <- d[,c("name", "from", "to", "result")]
d更简单的合并
:
anna3 <-merge(anna2,anna1[,1:3], all.y=TRUE)
anna3[is.na(anna3)] <- 0
另一种方法
require(plyr)
anna <- rbind(anna1, anna2)
ddply(anna, .(name, from, to), summarize, result = sum(result))
在ANA2数据框中,from和to列中的值与ANA2中的值相同。问题是,在anna2中,值是anna1的子集,因此……我只需要将0与正确行中anna1结果中的anna2结果中的值进行匹配并替换。您的意思是“与anna1中的值相同”吗?我想你可能误解了我。但是“唯一”,我的意思是,你从来没有过相同的值在anna1中出现两次的情况。你尝试过我的解决方案吗?从你所说的,我认为它应该起作用。如果它不起作用,请具体说明它是如何起作用的。@DavidRobinson你能帮我回答这个问题吗:[你能帮我回答这个问题吗:[
require(plyr)
anna <- rbind(anna1, anna2)
ddply(anna, .(name, from, to), summarize, result = sum(result))
require(data.table)
data.table(anna)[,list(result = sum(result)),'name, from, to']