我有两个带有手动添加标签的数据框。我想合并这两个数据框,同时保留两个数据框的标签。这篇文章表明 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 的所有标签。
有办法实现吗?
一个解决方案是使用
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"))
)