R:合并矩阵(不是 data.frames)

标签 r

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/

相关文章:

r - 使用 ggplot2 创建带有预先汇总数据的条形图

r - 将 t.test 结果输出到 R 中的数据框

r - 通过 data.table 按名称分组的上次销售日期和下次销售日期

r - 理解 R 中不同类型的循环(for、repeated、while)

r - ggplot 标签上的 curl curl

r - ddply 在 R 中拆分大量类别的问题

r - ES 计算为列 : 1 产生不可靠的结果(反向风险)

r - Shiny 不显示 R 绘图

r - 一个州等值线图中的县

Rstudio中的R找不到rmarkdown包