R语言按日期合并不同长度数据集时Klasse列返回NA如何解决
原因定位
- d2当前为矩阵结构,并非merge函数要求的data.frame类型,你提供的d2输出带
[1,]行索引标识可证明这一点,矩阵的列属性不满足merge的关联要求,导致匹配全部失败返回NA。 - 两个数据集的
Datum字段类型不统一,比如d1中Datum为Date格式,d2中Datum为字符串格式,或字符串存在隐藏的首尾空格,导致关联时无法匹配到相同值。 - d2未正确设置列名,转换为数据框后默认列名不是
Datum和Klasse,导致关联键不存在。
修复代码
首先将d2转为标准数据框并统一字段类型:
# 转换矩阵为数据框,指定列名 d2 <- as.data.frame(d2, stringsAsFactors = FALSE) colnames(d2) <- c("Datum", "Klasse") # 去除Datum字段可能存在的隐藏空格 d1$Datum <- trimws(as.character(d1$Datum)) d2$Datum <- trimws(as.character(d2$Datum)) # 统一转为Date类型避免格式误差 d1$Datum <- as.Date(d1$Datum) d2$Datum <- as.Date(d2$Datum) # 执行合并 result <- merge(d1, d2, by = "Datum", all.x = TRUE)
执行后result的Klasse列就会正确填充对应日期的等级值。
内容的提问来源于stack exchange,提问作者laurand
相关产品推荐
相关产品推荐

