R:合并矩阵(不是数据帧)
merge是一个非常好的函数:它合并矩阵和data.frames,并返回data.frames 具有相当大的字符矩阵, 还有其他合并的好方法吗- 没有数据帧转换R:合并矩阵(不是数据帧),r,R,merge是一个非常好的函数:它合并矩阵和data.frames,并返回data.frames 具有相当大的字符矩阵, 还有其他合并的好方法吗- 没有数据帧转换 评论1: 将命名向量与矩阵或data.frame合并的小函数。向量元素可以链接到矩阵中的多个条目: expand <- function(v,m,by.m,v.name='v',...) { df <- do.call(rbind,lapply(names(v),function(x) { pos <-
评论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
}
expandNo,必须(a)覆盖合并函数或(b)创建新的merge.matrix()
S3函数(这是解决问题的正确方法)
您可以在合并帮助中看到:
价值观
数据帧
另外,merge.default
函数:
> merge.default
function (x, y, ...)
merge(as.data.frame(x), as.data.frame(y), ...)
您可以使用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)
st1现在在Matrix.utils
包中有一个merge.Matrix
函数。这适用于矩阵组合以及大写M矩阵、数据帧等
匹配解决方案很好,但正如有人指出的那样,不适用于m:n关系。它也没有实现merge
的其他功能,包括all.x
,all.y
,等等。您不是只需要cbind
和rbind
?不,它们是不够的:当有m:n关系时,它们不会正确地展开/合并是,我喜欢在泛型的merge()
函数中添加方法的想法。是的,这可能是实现矩阵合并最简单的方法,您可能可以创建一个函数,将公共列合并到可以应用match()的键字符串中
如果要合并的列超过1列,则可以使用。match()和%in%进行合并。谢谢。您也可以直接按row.names合并<代码>合并(x,y,by=“row.names”)
。更多信息
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)