You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言按DECL_PERIO筛选多表合并仅首个筛选生效问题

错误原因

你的代码误用了as.data.frame()的传参规则:该函数仅会将第一个传入的对象转换为数据框结构,后续传入的3个筛选结果会被识别为行名、字符串配置等非数据内容参数,不会参与行拼接,因此最终结果仅保留第一个表的筛选数据。

正确实现代码

你已经确认4个表列名完全一致,直接使用dplyr包的bind_rows()做按行合并即可,一次运行就能得到筛选后的总表。同时可以用%in%运算符优化多值匹配的筛选逻辑,避免反复写|和==的冗余代码:

library(dplyr)

Terra_data <- bind_rows(
  Terr_data_HM90 %>% filter(DECL_PERIO %in% c("1901-1950", "1951-2000", "2001-2010", "2011-2015")),
  Terr_data_HM14 %>% filter(DECL_PERIO %in% c("2016", "2017")),
  Terr_data_HM18 %>% filter(DECL_PERIO %in% c("2018", "2019")),
  Terr_data_HM20 %>% filter(DECL_PERIO %in% c("2020", "2021"))
)
可选替代方案

如果不想依赖dplyr包,也可以用R基础函数实现,逻辑是先把4个筛选后的表存入列表,再调用do.call()批量执行行绑定:

Terra_data <- do.call(
  rbind,
  list(
    Terr_data_HM90[Terr_data_HM90$DECL_PERIO %in% c("1901-1950", "1951-2000", "2001-2010", "2011-2015"), ],
    Terr_data_HM14[Terr_data_HM14$DECL_PERIO %in% c("2016", "2017"), ],
    Terr_data_HM18[Terr_data_HM18$DECL_PERIO %in% c("2018", "2019"), ],
    Terr_data_HM20[Terr_data_HM20$DECL_PERIO %in% c("2020", "2021"), ]
  )
)

注意:基础rbind()对列类型一致性要求更严格,如果不同表同名列的存储类型(比如字符/因子)不一致会直接报错,bind_rows()会自动做类型兼容适配,更适合多表合并场景。

内容的提问来源于stack exchange,提问作者Shae11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:12:23