gpt4 book ai didi

r - dplyr 在标记的列上加入中断(避风港)

转载 作者:行者123 更新时间:2023-12-02 04:43:21 26 4
gpt4 key购买 nike

如果我使用 haven 读取带有标签的 Stata 或 SAS 数据集,它将(至少在 haven 0.2.0 中)以以下格式读取:

library(dplyr)
df1 <- data_frame(fips = structure(c(1001, 1001, 1001, 1001, 1001),
label = "FIPS (numeric)"),
id = structure(letters[1:5], label = "ID"))
df2 <- data_frame(fips = structure(c(1001, 1003, 1005, 1007, 1009),
label = "FIPS (numeric)"),
state = structure("AL", label = "State Abbreviation"))

(如有必要,我可以发布一些生成此数据的 Stata 数据,但这应该很容易使用任何标记的 Stata/SAS 数据集进行验证。)

当我尝试使用任何 dplyr 连接函数来连接带标签的列时,我感到非常失望:

df1 %>% inner_join(df2)

返回错误

Error in eval(expr, envir, enclos) : cannot join on columns 'fips' x 'fips': Can't join on 'fips' x 'fips' because of incompatible types (numeric / numeric)

避免它的唯一方法似乎是删除连接变量上的标签:

df1 %>%
mutate(fips = `attr<-`(fips, 'label', NULL)) %>%
inner_join(df2 %>% mutate(fips = `attr<-`(fips, 'label', NULL)))

这提出了为什么首先阅读标签的问题。 (连接还删除了 df2 中的标签。)

这似乎是 havendplyr 交互方式中的一个错误。有更好的解决方案吗?

最佳答案

尝试将列转换为字符串。这似乎有效

df1$fips<-as.character(df1$fips)
df2$fips<-as.character(df2$fips)
df1 %>% inner_join(df2)

inner_join 的帮助页面确实声明:“要加入的变量的字符向量”

关于r - dplyr 在标记的列上加入中断(避风港),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35489139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com