匹配排名数据框中的公共行
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" 的所有值的总和,而不是每一行。
任何人都可以帮我匹配三个或更多不同排名的 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" 的所有值的总和,而不是每一行。