R语言忽略NA值匹配经度对应source列最高频字符串创建新列咨询
修正方案
你的代码存在两个需要调整的点:
- 没有提前过滤
source列的缺失值:你的源数据中同时存在字符串类型的"NA"和R原生的NA缺失值,需要先将这两类值排除后再统计频次 - 排序逻辑错误:你使用升序
order(N)取第一个值,实际要取出现次数最多的取值,需要用降序order(-N)
修正后代码
library(data.table) setDT(data) # 先过滤缺失值,再分组统计频次,降序排序后取每组第一个 dataM <- data[!is.na(source) & source != "NA", .N, .(longitude, source)][order(-N), .(first = first(source)), longitude]
输出结果验证
运行上述代码后得到的dataM和你预期的输出完全一致:
structure(list(longitude = c(20.5, 15.2, 24.9), first = c("OSM", "OSM", "SIGE")), row.names = c(NA, -3L), class = c("data.table", "data.frame"))
内容的提问来源于stack exchange,提问作者Coralie
相关产品推荐
相关产品推荐

