在绑定之前自动将一个数据框的所有列类型强制为另一个数据框的类型

2024-02-22

假设我有两个要绑定的数据框:

ds_a <- data.frame(
  x = 1:6,
  y = 5,
  z = "4",
  l = 2,
  stringsAsFactors = FALSE
)

ds_b <- data.frame(
  x = as.factor(1:6),
  y = "5",
  p = 2,
  stringsAsFactors = FALSE
)

当我尝试绑定它们时,出现以下错误:

> bind_rows(ds_a, ds_b)
Error: Can't combine `..1$x` <integer> and `..2$x` <factor<4c79c>>.

通常,我解决这个问题的方法是将两个数据框中的所有列都转换为字符,绑定两个数据框,然后手动将所有列重新转换回其原始类型。

有没有一种方法可以简单地强制之间的所有类型冲突ds_a and ds_b通过自动铸造ds_b要匹配的列ds_a(假设它们的名字相同)?

更一般地说,我想要一个解决方案来自动转换中的所有列ds_b的类型ds_a只要列名匹配。如果解决方案应该有效ds_b and ds_a不要共享所有相同的列(当列不存在于一个列中而存在于另一个列时,只需填充 NA )。

这是预期的结果:

ds_merged =read.table(text = 'x y z l p 
1 1 5 4 2 NA
2 2 5 4 2 NA
3 3 5 4 2 NA
4 4 5 4 2 NA
5 5 5 4 2 NA
6 6 5 4 2 NA
7 1 5 NA NA 2
8 2 5 NA NA 2
9 3 5 NA NA 2
10 4 5 NA NA 2
11 5 5 NA NA 2
12 6 5 NA NA 2', header = TRUE, row.names = NULL)

> ds_merged

   row.names x y  z  l  p
1          1 1 5  4  2 NA
2          2 2 5  4  2 NA
3          3 3 5  4  2 NA
4          4 4 5  4  2 NA
5          5 5 5  4  2 NA
6          6 6 5  4  2 NA
7          7 1 5 NA NA  2
8          8 2 5 NA NA  2
9          9 3 5 NA NA  2
10        10 4 5 NA NA  2
11        11 5 5 NA NA  2
12        12 6 5 NA NA  2

我们可以使用type.convert()

说明:OP评论后:

type_convert不考虑ds_a(你可以检查一下是否比较glimpse(ds_a) with glimpse结果数据帧的:

请注意以下各列ds_a具有与中相同的类result.

> # compare classes
> glimpse(ds_a)
Rows: 6
Columns: 4
$ x <int> 1, 2, 3, 4, 5, 6
$ y <dbl> 5, 5, 5, 5, 5, 5
$ z <chr> "4", "4", "4", "4", "4", "4"
$ l <dbl> 2, 2, 2, 2, 2, 2
> glimpse(ds_b)
Rows: 6
Columns: 3
$ x <fct> 1, 2, 3, 4, 5, 6
$ y <chr> "5", "5", "5", "5", "5", "5"
$ p <dbl> 2, 2, 2, 2, 2, 2
> glimpse(result)
Rows: 12
Columns: 5
$ x <int> 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6
$ y <dbl> 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
$ z <chr> "4", "4", "4", "4", "4", "4", NA, NA, NA, NA, NA, NA
$ l <dbl> 2, 2, 2, 2, 2, 2, NA, NA, NA, NA, NA, NA
$ p <int> NA, NA, NA, NA, NA, NA, 2, 2, 2, 2, 2, 2

What type.convert所做的是:

  1. 将最佳拟合类应用于数据ds_b(注意 %>% 位于bind_rows)。所以所有的ds_b$x是整数,因此 R 将类因子转换为 ds_b$x 中的类整数。
  2. All of ds_b$y是字符类,但本质上是整数,因此 R 将字符类转换为整数类。这可能会导致误解。但是,现在我们有ds_a$y双级和ds_b$y整数类 -> 但这对于 R 和 来说没有问题bind_rows这里双类覆盖整数。
> # showing what type.convert does to ds_b
> ds_b$x <- as.integer(ds_b$x)
> ds_b$y <- as.integer(ds_b$y)
> ds_b %>% 
+   as_tibble()
# A tibble: 6 x 3
      x     y     p
  <int> <int> <dbl>
1     1     5     2
2     2     5     2
3     3     5     2
4     4     5     2
5     5     5     2
6     6     5     2
> ds_b %>% 
+   as_tibble()
# A tibble: 6 x 3
      x     y     p
  <int> <int> <dbl>
1     1     5     2
2     2     5     2
3     3     5     2
4     4     5     2
5     5     5     2
6     6     5     2
> bind_rows(ds_a, ds_b) %>% 
+   as_tibble()
# A tibble: 12 x 5
       x     y z         l     p
   <int> <dbl> <chr> <dbl> <dbl>
 1     1     5 4         2    NA
 2     2     5 4         2    NA
 3     3     5 4         2    NA
 4     4     5 4         2    NA
 5     5     5 4         2    NA
 6     6     5 4         2    NA
 7     1     5 NA       NA     2
 8     2     5 NA       NA     2
 9     3     5 NA       NA     2
10     4     5 NA       NA     2
11     5     5 NA       NA     2
12     6     5 NA       NA     2
  1. 皈依者ds_b$p这是 double 类到整型的类型,因为数据本质上是整数。

解决方案:

library(dplyr)
bind_rows(ds_a, ds_b %>% type.convert(as.is=TRUE))

output:

   x y    z  l  p
1  1 5    4  2 NA
2  2 5    4  2 NA
3  3 5    4  2 NA
4  4 5    4  2 NA
5  5 5    4  2 NA
6  6 5    4  2 NA
7  1 5 <NA> NA  2
8  2 5 <NA> NA  2
9  3 5 <NA> NA  2
10 4 5 <NA> NA  2
11 5 5 <NA> NA  2
12 6 5 <NA> NA  2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在绑定之前自动将一个数据框的所有列类型强制为另一个数据框的类型 的相关文章

  • 使用 readHTMLTable 从 https 网页读取表格

    我安装了 R 3 3 1 并使用 RStudio 0 99 903 我正在尝试从以下 URL 将表格读入 R https www fantasypros com nfl rankings consensus cheatsheets php
  • R:如何找到向量的模式[重复]

    这个问题在这里已经有答案了 下面是我的data frame我想知道每个内存类别 1 到 8 的模式是什么 gt dput d structure list MEMORY1 c 5 5 7 1 5 6 4 5 4 5 5 4 1 5 5 2
  • 改进R中从google获取股票新闻数据的功能

    我已经编写了一个函数来从 Google 获取和解析给定股票代码的新闻数据 但我确信有一些方法可以改进它 对于初学者来说 我的函数返回一个 GMT 时区的对象 而不是用户当前的时区 如果传递的数字大于 299 它就会失败 可能是因为 goog
  • RStudio 不会通过 rPython 调用加载所有 Python 模块

    我从 Bash 和 RStudio 中运行相同的脚本时出现一些意外行为 请考虑以下事项 我有一个文件夹 rpython 包含两个脚本 test1 R library rPython setwd rpython python load tes
  • dplyr 中的标准评估:全局环境中的函数出现“无法找到函数”错误

    我试图在 dplyr 中对全局环境中的函数使用标准评估 但出现 无法找到函数 错误 这是一些代码 create data frame df lt data frame x rnorm 10 y rnorm 10 define arbitra
  • R参考类问题

    我正在尝试在 R 中创建一个简单的参考类 这是我的代码 R 初学者 MyClass lt setRefClass MyClass fields list a numeric b numeric methods list initialize
  • 更改 pander 中的默认对齐方式 (pandoc.table)

    我目前正在切换到pander对于我的大部分时间knitr markdown格式化 因为它提供了如此出色的pandoc支持 我不太满意的一件事是默认的居中对齐 营销人员可能会喜欢它 但对于技术报告来说这是一个可怕的事情 使用的最佳选择Hmis
  • 使用 ggplot 构面时增加闪亮的绘图大小

    有没有办法增加绘图窗口的大小shiny取决于在一个中使用的面的数量ggplot图 也许使用垂直滚动 例如 使用下面的示例 当输入为 A 有三个方面 情节看起来不错 当选项 B 选择绘图数量会增加 但绘图窗口保持相同大小 导致绘图太小 是否有
  • 按不规则时间间隔对数据进行分组求和(R语言)

    我正在看这里的 stackoverflow 帖子 R 计算一组内的观察次数 https stackoverflow com questions 65366412 r count number of observations within a
  • 在 igraph 中为社区分配颜色

    我在 igraph 中使用 fastgreedy community 检测算法在 R 中生成社区 代码返回 12 个社区 但是在绘图时很难识别它们 因为它返回的图的颜色数量有限 我怎样才能用十二种不同的颜色绘制这个图表 l2 lt layo
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 排序因素与水平

    有人能解释一下 R 中 ordered 参数的用途吗 R says ordered逻辑标志来确定级别是否应被视为有序 按给定的顺序 所以如果我有一个名为名称的因素并设置ordered TRUE names lt factor c fred
  • 如何自动启动我的 ec2 实例、运行命令然后将其关闭?

    我想每周对 redshift postgres 数据库中的数据运行一次机器学习模型 我使用以下命令将 R 脚本设置为休息 apiplumbr然后我将其设置为一项任务来管理pm2 我有它 所以任务会在ec2实例启动然后继续运行 要让 R 脚本
  • 如何定义“f_n-chi-square”函数并使用“uniroot”求置信区间?

    I want to get a 95 confidence interval for the following question 我已经写了函数f n在我的 R 代码中 我首先使用 Normal 随机采样 100 个样本 然后定义函数h
  • 合并数据框而不重复行

    我想合并两个数据框 但如果有多个匹配项 则不想重复行 相反 我想总结一下那天的观察结果 来自 合并 提取两个数据框中与指定列匹配的行并将其连接在一起 如果有多个匹配项 则所有可能的匹配项各贡献一行 这是一些示例代码 days lt as d
  • 按特定样本前缀对列名称向量进行子集化

    假设我有一个如下所示的数据框 ca01 lt c 1 10 ca02 lt c 2 11 ca03 lt c 3 12 stuff 1 lt rep test 10 other lt rep 9 10 data lt data frame
  • 从 R 中的方差分析 (glm) 中提取残余偏差

    我在 R 中安装了一个 glm 模型并采用了方差分析表 我需要提取 残余偏差 列 但它会产生错误 以下是代码 创建数据 counts lt c 18 17 15 20 10 20 25 13 12 outcome lt gl 3 1 9 t
  • 无法部署 ShinyApp:readTableHeader 在“raw”上发现不完整的最后一行(使用默认值:en_US)

    我已经拼命尝试部署我的闪亮应用程序大约一周了 但不幸的是我无法停止收到以下消息 Warning message Error detecting locale Error in read table file file header head
  • 不同 R/lme4 版本的单一拟合结果不匹配

    我试图将 R 版本 3 5 3 lme4 1 1 18 1 的随机效应估计与 R 版本 4 1 1 lme4 1 1 27 1 相匹配 然而 当存在奇异拟合时 这两个版本之间的随机效应存在微小差异 我对奇点警告很满意 但令人费解的是不同版本
  • 如何绘制大时间序列(数千次给药次数/药物剂量)?

    我正在尝试绘制医院中如何开出单一药物的图解 在这个虚拟数据库中 我在 2017 年 1 月 1 日之后遇到了 1000 名患者 绘图的目的是了解该药物的给药模式 在接近入院 出院或患者住院期间是否更频繁 高剂量给药 Get random d

随机推荐

  • 具有自定义注册控制器的设置设备

    我正在使用 devise 开发一个 Rails 站点 我们还不希望用户注册 用户身份验证使我们可以登录以访问网站的受限部分并添加 编辑我们认为合适的内容 所以现在 我创建了以下控制器 class Users RegistrationCont
  • 如何检查日期是否在日期字符串列表中?

    这将始终打印 false 如何检查日期是否在数组中并打印正确的内容 dates 2012 09 03 2012 10 08 2012 10 09 2012 11 12 more values snipped for brevity 2013
  • 圆柱/圆锥上均匀生成 3D 点

    我希望在圆柱体和圆锥体上 分别 随机且均匀地生成点 圆柱体由其中心 半径和高度定义 锥体规格相同 我能够获得每个形状的边界框 因此我正在考虑在边界框内生成点 但是 我不确定如何将它们投影到圆柱体 圆锥体上 或者这是否是最好的主意 有什么建议
  • Redis 模仿 MASTER/MASTER?或者是其他东西?

    我已经阅读了这里的很多帖子并上网冲浪 但也许我没有问正确的问题 我知道 Redis 目前是主 从 直到 Cluster 可用 但是 我想知道是否有人可以告诉我如何在逻辑上配置 Redis 以满足我的需求 或者它是否不是正确的工具 设想 我们
  • 如何使用 XPath/XSLT fn:json-to-xml

    我需要将 JSON 字符串转换为 XML 字符串 标签确实包含属性 从答案中this https stackoverflow com questions 38783463 how to convert badgerfish style js
  • 多线程访问LinkedList时的线程安全

    我的应用程序需要保留对特定资源的请求的访问日志 并且多个线程将记录日志条目 唯一相关的信息是请求的时间戳 检索的统计信息将是过去 X 秒内发生的请求数量 返回给定秒数的统计信息的方法还需要支持多线程 我正在考虑使用以下方法来处理并发处理Lo
  • 列出多个jar文件的内容

    我正在一堆罐子里寻找 class 文件 jar tf abc jar 适用于一个文件 我试过 find name jar xargs jar tf 不打印任何内容 我能想到的唯一解决方案是全部解压 然后搜索 有没有更好的办法 我在 LUni
  • 我如何判断 RenderAction 是否正在调用我的操作?

    我有一个可能通过普通链接调用的操作 在这种情况下我会返回 View 或者也可以通过 AJAX 或 RenderAction 即作为子操作 调用它 在这种情况下我会返回一个 PartialView 整理 AJAX 部分很容易 但如何测试我的操
  • 尝试执行restclient请求时找不到合适的HttpMessageConverter

    我正在尝试使用Spring for Android rest client发送数据http post 以避免创建和解析 json 数据 来自他们的manual http static springsource org spring andr
  • 增加内存映射文件的大小[重复]

    这个问题在这里已经有答案了 可能的重复 如何动态扩展内存映射文件 https stackoverflow com questions 6096485 how to dynamically expand a memory mapped fil
  • workbox serviceworker 在除 Chrome 之外的任何地方工作:未捕获(承诺中)DOMException

    Workbox 无法在 Chrome 上运行 但在其他地方都可以运行 这很讽刺 因为我相信这是一个谷歌图书馆 显示的错误是 Uncaught in promise DOMException sw js line 1 Chrome Opera
  • 从 Python 中的嵌套列表中删除一列

    我需要帮助弄清楚如何从嵌套列表中删除 列 来修改它 说我有 L 1 2 3 4 5 6 7 8 9 1 2 3 我想删除第二列 因此值为 2 6 1 以获得 L 1 3 4 5 7 8 9 2 3 我一直不知道如何通过删除一列来修改列表 我
  • Qt:QTableWidget/QTableView 在整个视口中交替行颜色

    我有一个 QTableView 包含数据库中的数据行 但是 设置 setAlternatingRowColors true 仅交替具有数据的行颜色 表的其余部分只是白色 这不是您期望的行为 例如 查看任何浏览器的书签列表 空行具有交替颜色
  • Swift Firebase 快照到对象模型

    我正在使用一个大型 Firebase 数据库 该数据库至少有 6 层层次结构 并且每个节点有许多子节点 我想解析整个快照并将其转换为对象模型 我发现this https stackoverflow com questions 3551449
  • 检测何时位于字符串流的末尾

    我正在尝试编写一个函数来检测我何时几乎到达字符串流的末尾 但它似乎不起作用 这是一些代码 std string path 1 2 3 int number std stringstream ss path while ss eof if s
  • 从自制软件安装后无法使 ffmpeg 工作

    我通过自制程序安装了 ffmpeg 但是当我尝试运行它时 即使只是输入ffmpeg我收到以下错误消息 dyld Library not loaded usr local lib liblzma 5 dylib Referenced from
  • Android EGL/OpenGL ES 帧率卡顿

    TL DR 即使根本不进行任何绘制 在 Android 设备上的 OpenGL ES 渲染线程上保持 60Hz 的更新率似乎也是不可能的 神秘的峰值经常出现 在底部的代码中演示 而我为找出原因或如何导致的一切努力都导致了死胡同 在使用自定义
  • Spring MVC 和 Thymeleaf 资源版本控制

    我正在尝试使用 Spring Mvc 4 进行资源版本控制 我使用 thymeleaf 模板引擎 但不适用于以下代码 加载页面时 当我查看页面源代码时 我看不到新版本的 Url 那么我的代码有什么问题 我想念什么 Override publ
  • 如何从给定字符串查找给定编辑距离处的所有字符串

    我们都在谷歌中看到过 如果我们输入查询并输入错误 谷歌会建议一个更清晰的查询版本 通常是正确的 现在他们是怎么做到的呢 我能想到的一种可能的方法是找出距给定字符串编辑距离为 1 的所有其他字符串 如果其中任何一个返回具有更高值 search
  • 在绑定之前自动将一个数据框的所有列类型强制为另一个数据框的类型

    假设我有两个要绑定的数据框 ds a lt data frame x 1 6 y 5 z 4 l 2 stringsAsFactors FALSE ds b lt data frame x as factor 1 6 y 5 p 2 str