匹配排名数据帧中的常见行

时间:2015-12-28 01:23:08

标签: r ranking matching

有没有人可以帮助我匹配三个或更多不同排名的df,让最后一个只包含所有共有的行?我正在尝试匹配和合并功能,但我不能再进一步了。

以下是数据的外观:

const char* shaderprogram = TO_STR(#version 300 es \n);
然而,

“letter”是每个df上的“row.names”只有一列,其数字为“x”,即排名值。

2 个答案:

答案 0 :(得分:1)

创建数据

A <- data.frame(letter=LETTERS[sample(10)], x.A=runif(10))
B <- data.frame(letter=LETTERS[sample(10)], x.B=runif(10))
C <- data.frame(letter=LETTERS[sample(10)], x.C=runif(10))

在所有data.frames中找到相交的字母

vec.intersect <- Reduce(function(x, y) intersect(x, y), list(A[,1], B[,1], C[,1]), accumulate = FALSE)

合并相交的data.frames

df.intersected <- Reduce(function(x, y) merge(x, y, by = "letter"), list(A[with(A, letter %in% vec.intersect),], B, C), accumulate = FALSE)

答案 1 :(得分:1)

谢谢你们,你们@Pascal给出了函数提供解决方案的链接:

MyMerge       <- function(x, y){
df            <- merge(x, y, by= "row.names", all.x= F, all.y= F)
rownames(df)  <- df$Row.names
df$Row.names  <- NULL
return(df)
}
dat           <- Reduce(MyMerge, list(df1, df2, df3, df4, df5, df6))

然而,有可能重新排列最终的“dat”,例如新行的值的总和吗? 我是tryng stg。像这样添加一个具有和值的列:

 dat[,7] <- sum (dat[1:nrow (dat), ,drop=F])

但我得到“dat”的所有值的总和,而不是每行。