使用 left_join() 合并数据时如何保留标签?

问题描述 投票:0回答:1

我有两个带有手动添加标签的数据框。我想合并这两个数据框,同时保留两个数据框的标签。这篇文章表明 left_join() 正是这样做的。

我尝试了以下方法:

library(dplyr)

# Create first sample dataframe
df1 = data.frame(matrix(1:10, nrow=5))
attributes(df1)$variable.labels[1] <- "Reference Variable"
attributes(df1)$variable.labels[2] <- "Label 1"

# Create second sample dataframe
df2 = data.frame(matrix(1:30, nrow=10))
names(df2)[2] <- "Y2"
names(df2)[3] <- "Y3"
attributes(df2)$variable.labels[2] <- "Label 2"
attributes(df2)$variable.labels[3] <- "Label 3"

# Merge both dataframes
merged_data <- left_join(x = df1, y = df2, by = "X1")

# Labels of df1 still exist while the ones from df2 don't
attributes(merged_data)$variable.labels[2]
attributes(merged_data)$variable.labels[3]
attributes(merged_data)$variable.labels[4]

在合并的数据框中,Y2 和 Y3 的标签丢失了。期望的结果是使数据框 merged_data 具有来自 df1 和 df2 的所有标签。

有办法实现吗?

r merge label
1个回答
0
投票

一个解决方案是使用

attr()
重新附加属性。例如:

attr(merged_data, "variable.labels") <- c(
  attr(df1, "variable.labels"),
  attr(df2, "variable.labels")
)

内联管道可以这样做:

merged_data <-
  left_join(x = df1, y = df2, by = "X1") %>%
  `attr<-`(
    "variable.labels",
    c(attr(df1, "variable.labels"),
      attr(df2, "variable.labels"))
  )
© www.soinside.com 2019 - 2024. All rights reserved.