有没有人可以帮助我匹配三个或更多不同排名的df,让最后一个只包含所有共有的行?我正在尝试匹配和合并功能,但我不能再进一步了。
以下是数据的外观:
const char* shaderprogram = TO_STR(#version 300 es \n);
然而,“letter”是每个df上的“row.names”只有一列,其数字为“x”,即排名值。
答案 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”的所有值的总和,而不是每行。