如何在 R 中按行名合并 2 个以上的数据帧?

2024-01-23

我从 4 个 df 收集数据,并希望按行名合并它们。我正在寻找一种有效的方法来做到这一点。这是我所拥有的数据的简化版本。

df1           <- data.frame(N= sample(seq(9, 27, 0.5), 40, replace= T),
                            P= sample(seq(0.3, 4, 0.1), 40, replace= T),
                            C= sample(seq(400, 500, 1), 40, replace= T))
df2           <- data.frame(origin= sample(c("A", "B", "C", "D", "E"), 40,
                                           replace= T),
                            foo1= sample(c(T, F), 40, replace= T),
                            X= sample(seq(145600, 148300, 100), 40, replace= T),
                            Y= sample(seq(349800, 398600, 100), 40, replace= T))
df3           <- matrix(sample(seq(0, 1, 0.01), 40), 40, 100)
df4           <- matrix(sample(seq(0, 1, 0.01), 40), 40, 100)
rownames(df1) <- paste("P", sprintf("%02d", c(1:40)), sep= "")
rownames(df2) <- rownames(df1)
rownames(df3) <- rownames(df1)
rownames(df4) <- rownames(df1)

这就是我通常会做的:

# merge df1 and df2
dat           <- merge(df1, df2, by= "row.names", all.x= F, all.y= F) #merge
rownames(dat) <- dat$Row.names #reset rownames
dat$Row.names <- NULL  #remove added rownames col

# merge dat and df3
dat           <- merge(dat, df3, by= "row.names", all.x= F, all.y= F) #merge
rownames(dat) <- dat$Row.names #reset rownames
dat$Row.names <- NULL  #remove added rownames col

# merge dat and df4
dat           <- merge(dat, df4, by= "row.names", all.x= F, all.y= F) #merge
rownames(dat) <- dat$Row.names #reset rownames
dat$Row.names <- NULL #remove added rownames col

正如您所看到的,这需要大量代码。我的问题是是否可以通过更简单的手段达到相同的结果。我已经尝试过(没有成功):更新:现在可以了!

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))

join_all from plyr可能会做你想做的事。但它们都必须是数据框,并且行名作为列添加

require(plyr)

df3 <- data.frame(df3)
df4 <- data.frame(df4)

df1$rn <- rownames(df1)
df2$rn <- rownames(df2)
df3$rn <- rownames(df3)
df4$rn <- rownames(df4)

df <- join_all(list(df1,df2,df3,df4), by = 'rn', type = 'full')

type即使行名不同且不匹配,参数也应该有所帮助 如果您不需要行名称:

df$rn <- NULL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 R 中按行名合并 2 个以上的数据帧? 的相关文章

随机推荐

  • 在RelativeLayout中获取子视图

    我想在我的活动中添加一个按钮 该按钮将返回相对布局的所有子视图 如何获取相对布局视图的所有子视图 RelativeLayout延伸ViewGroup其中有getChildCount and getChildAt int index 方法 所
  • 使用命令行编译 C++ 代码

    我使用下面的命令来编译我的 C 代码 它使用 OpenCV 库 我的命令就像 opencv main cpp o binary name 其中 opencv 是一个别名命令 例如 alias opencv g pkg config cfla
  • 使用 YoutubeURL 获取 oembed 返回 403 Forbidden

    这几天 我突然收到来自 403 Forbidden 的回复https www youtube com oembed url youtubeURl 我检查了Youtube API的文档 但我找不到它对oembed有限制并且也有授权 我只能看到
  • 在 bash 中将 HH:MM:SS.mm 转换为秒

    我正在运行一些 gnu 时间脚本 它们会生成以下形式的输出 mm ss mm 分 秒和毫秒 例如 1 20 66 或 hh MM ss 小时 分钟和秒 例如 1 43 38 我想将其转换为秒 以便比较它们并将它们绘制在图形中 使用 bash
  • Silverlight:如何在代码后面更改AxisLabelStyle?

    在 xaml 文件中 我们可以通过执行以下操作来更改 AxisLabelStyle
  • Java Servlet API 向后兼容吗?

    我想编写一个使用 javax servlet API 的 JAR 文件 如果我针对 2 2 版本编写 是否意味着它可以在 2 3 2 4 和 2 5 版本上工作 Thanks 是的 它们是向后兼容的 甲骨文来源 http docs orac
  • 面向对象设计实践问题[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 过去几年我几乎只开发 C 代码 我目前正在寻求提高我的面向对象设计技能 任何人都可以推荐任何包含一系列简
  • 如何在 Kerberos 中“取消模拟”(取消委托?)

    我有一个使用 Kerberos 的 Web 应用程序来使用 ASP NET 3 5 和 IIS 访问外部资源 当用户连接到应用程序时 Kerberos 身份验证会自动允许我使用委派作为用户连接到外部资源 这并不容易做到 这很好 但我有一个问
  • .net 正则表达式用于超过 2 个连续字母

    我正在尝试为 2 个以上的连续字母编写 Net 正则表达式 aa fine Aa fine aaa not allowed Aaa not allowed 我是正则表达式的新手 但这是我到目前为止所拼凑的 if Regex IsMatch
  • uwp命令栏始终显示标签

    Answer 谢谢贾斯汀XL https stackoverflow com users 231837 justin xl我能够解决我的问题 我实现了他在下面的回答中提供的样式 并按照他的说法在 App xaml 中添加了这一点 我将高度更
  • 在 Android 上点击后退按钮时关闭应用程序

    所以我的登录活动是您看到的第一个屏幕 当您点击后退按钮时 它会退出应用程序 很好 所以我再次打开应用程序 登录后 我现在处于我的主要活动中 我该如何做到这一点 以便当我现在点击后退按钮时 它会退出应用程序而不是返回到登录活动 当您推送新活动
  • git分支、fork、fetch、merge、rebase和clone之间有什么区别?

    我想了解 Git 中分支 分叉和克隆之间的区别 同样 当我做一个时 这意味着什么git fetch与git pull 另外 什么是rebase与 相比 意味着merge 我怎样才能将个人的承诺压缩在一起 它们如何使用 为什么使用以及它们代表
  • 从另一个对象向 stdClass 对象添加属性

    我希望能够执行以下操作 obj new stdClass obj gt status success obj2 new stdClass obj2 gt message OK 如何扩展 obj 使其包含 obj2 的属性 例如 obj gt
  • 错误:未定义配置属性“mongoURI”

    我尝试启动一个项目 但是当我尝试将 mongo 连接到服务器时 我遇到一个错误 显示连接不起作用 因为它找不到连接字符串所在的文件夹 我的数据库文件 const mongoose require mongoose const config
  • Roslyn 实际上允许您操作 CSharp 项目的 TreatWarningsAsErrors 吗?

    我正在尝试检索设置 TreatWarningsAsErrors 但无法为我加载的解决方案的项目找到它 我想要完成的是从项目文件中获取设置 并将其设置为true 如果还没有的话 接下来 我想让 Roslyn 使用新设置进行编译 这样我就可以检
  • 替换 html 标签中没有的所有引号

    目前我正在用特殊引号替换文本中的所有引号 但是我如何更改我的正则表达式 只替换文本中的引号 而不替换 html 标记中使用的引号 text preg replace w raquo text text preg replace lt w l
  • 使用 Swift 3 和 Alamofire 4 获取客户端证书以进行相互身份验证

    我试图弄清楚如何使用 Alamofire 4 0 和 Swift 3 0 将 p12 如果需要 我也有 PEM 证书和密钥 发送到网站进行身份验证 我看到的所有示例都是针对 Swift 2 0 的 并不完全是我想要的 在我的 mac 上的
  • 录制 mp3 而不是 caf 文件

    我正在看这个例子 https developer apple com library ios samplecode SpeakHere Introduction Intro html https developer apple com li
  • 如何尽可能干净地使用 VS C++ GetEnvironmentVariable?

    这与其说是一个问题 不如说是一种迂腐的做法 所以就这样吧 我已经制作了一个很好的小程序 它是我的 Linux 操作系统本机的 但我认为它也足够有用 可以存在于我的 Windows 机器上 因此 我想访问Windows的环境变量 MSDN引用
  • 如何在 R 中按行名合并 2 个以上的数据帧?

    我从 4 个 df 收集数据 并希望按行名合并它们 我正在寻找一种有效的方法来做到这一点 这是我所拥有的数据的简化版本 df1 lt data frame N sample seq 9 27 0 5 40 replace T P sampl