匹配排名数据框中的公共行

match common rows from ranked dataframes

任何人都可以帮我匹配三个或更多不同排名的 df 以获得最后一个只包含所有这些 df 共有的行吗?我正在尝试匹配和合并功能,但我不能再继续了。

数据可能如下所示:

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

"letter" 然而,每个 df 上的 "row.names" 只有一列带有数字 "x",排名值。

创建数据

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)

谢谢你们,还有你们@Pascal link,它通过函数给出了解决方案:

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" 重新排序,例如根据新行的值的总和? 我正在尝试。像这样添加一个包含总和值的列:

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

但我得到了 "dat" 的所有值的总和,而不是每一行。