merge 是一个非常好的函数:它合并矩阵和 data.frames,并返回一个 data.frame。
Having rather big character matrices, is there another good way to merge - without data.frame conversion?
评论 1:
将命名向量与矩阵或 data.frame 合并的小函数。向量的元素可以链接到矩阵中的多个条目:
expand <- function(v,m,by.m,v.name='v',...) {
df <- do.call(rbind,lapply(names(v),function(x) {
pos <- which(m[,by.m] %in% v[x])
cbind(x,m[pos,],...)
}))
colnames(df)[1] <- v.name
df
}
例子:
v <- rep(letters,each=3)[seq_along(letters)]
names(v) <- letters
m <- data.frame(a=unique(v),b=seq_along(unique(v)),stringsAsFactors=F)
expand(v,m,'a')
最佳答案
您可以使用 match 和 cbind 的组合在不转换为数据框的情况下进行等效的合并,一个简单的例子:
st1 <- state.x77[ sample(1:50), ]
st2 <- as.matrix( USArrests )[ sample(1:50), ]
tmp1 <- match(rownames(st1), rownames(st2) )
st3 <- cbind( st1, st2[tmp1,] )
head(st3)
跟踪您想要的列,并在一组中合并多对一的关系或丢失的行需要更多的思考,但仍然是可能的。
关于R:合并矩阵(不是 data.frames),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3717734/