gpt4 book ai didi

r - dplyr bind_rows 不保留变量标签

转载 作者:行者123 更新时间:2023-12-04 11:03:24 25 4
gpt4 key购买 nike

haven::read_dta支持使用 label 将变量标签从 Stata 导入 R属性。 Rstudio 还支持在 View Pane 中显示这些标签。

但是,当使用 dplyr::bind_rows 绑定(bind)两个数据帧时(或 rbind_all ),标签不会被保留。这是一个错误吗?

library(dplyr)
id <- 1:5
attr(id, "label") <- "unit id"

df1 <- tbl_df(data.frame(id)) # label is fine
df1$id
# [1] 1 2 3 4 5
# attr(,"label")
# [1] "unit id"

df2 <- tbl_df(data.frame(id)) # label is fine
df2$id
# [1] 1 2 3 4 5
# attr(,"label")
# [1] "unit id"

df_bound <- bind_rows(df1, df2) # label is gone
df_bound$id
# [1] 1 2 3 4 5 1 2 3 4 5

最佳答案

sjlabelledDaniel Lüdecke 打包是处理标记数据时此类问题的一个很好的解决方案。我用了copy_labels类似问题的功能:

library(dplyr)  
library(sjlabelled)
id <- 1:5
attr(id, "label") <- "unit id"
df1 <- tbl_df(data.frame(id))
str(df1)
# tibble [5 × 1] (S3: tbl_df/tbl/data.frame)
# $ id: int [1:5] 1 2 3 4 5
# ..- attr(*, "label")= chr "unit id"
df2 <- tbl_df(data.frame(id)) # label is fine
df_bound <- bind_rows(df1, df2) # label is gone
str(df_bound)
# tibble [10 × 1] (S3: tbl_df/tbl/data.frame)
# $ id: int [1:10] 1 2 3 4 5 1 2 3 4 5

df_bound <- copy_labels(df_bound, df1)
df_bound_labelled <- df_bound %>% mutate_at(vars(id), as_labelled)
str(df_bound_labelled)
# tibble [10 × 1] (S3: tbl_df/tbl/data.frame)
# $ id: int [1:10] 1 2 3 4 5 1 2 3 4 5
# ..- attr(*, "label")= chr "unit id"

关于r - dplyr bind_rows 不保留变量标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890137/

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