我想绑定来自两个不同数据框的行,其中一个数据框包含一列哈希值,而第二个数据框不包含该列。
library(tidyverse)
library(openssl)
df <- data.frame(x = sha3(letters[1:3], size = 512),
y = 1:3)
df2 <- data.frame(y = 4:6)
df |>
bind_rows(df2)
尝试绑定行时,出现以下错误:
Error in `bind_rows()`:
! Can't combine `..1` <hash> and `..2` <vctrs:::common_class_fallback>.
Run `rlang::last_trace()` to see where the error occurred.
NA
我不知怎么就明白了这是怎么回事,因为第二个数据框不包含 x 列。但是,我预期/期望的输出是 bind_rows 仍然有效,并且只用填充 x 列df2
。
编辑:
我创建了一个小解决方法,只需将哈希列从 df 转换回字符,但我仍然好奇我是否可以首先避免错误。
此问题并非特定于哈希。如果您有一个未定义
c
方法的对象,则会发生此问题。bind_rows
用途vctrs::vec_rbind
和文档说明:这不是确切的情况(没有公共类),但我们
<vctrs:::common_class_fallback>
在错误消息中看到了。如果我们定义一个简单的,c.hash
它会起作用。不幸的是,它没有保留类。我不知道为什么。我建议使用
rbind.fill
:这是因为
sha3()
将向量转换为哈希。您可以对其进行转换,例如,as.character()
使用输出为:
在基础上我们可以做
其中
new
是类 的新对象data.frame
。