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

R语言across维度计算报错求助:数据处理代码问题排查

问题排查与修正

核心错误原因

你的代码中最关键的问题出在最后一步的条件判断:

if(is.na(.x) & (right == left_side))

这里left_side是字符串"EltA",而right是通过sum(c_across(...))计算得到的数值型列,用数值和字符串做相等判断,结果永远是FALSE,导致replace_na(.x,0)根本不会执行,同时还会触发类型不匹配的警告。

你的真实需求应该是判断right的数值是否等于当前行中EltA列的数值,而非等于字符串"EltA"。

修正后的代码

geo <- c("AT","BE","CZ","DE")
time <- c(2020, 2020, 2021,2021)
EltA1 <- c(150, NA, 120,NA)
EltA2 <- c(60, 70, 80,NA)
EltA <- c(210,110,200,8200)

test <- data.frame(geo, time, EltA1, EltA2, EltA)

left_side <- "EltA"
right_side <- c("EltA1","EltA2")


test <- test %>% 
  rowwise() %>%
  mutate(right = sum(c_across(any_of(right_side)),na.rm = TRUE)) %>%
  ungroup() 

# 修正条件判断,引用EltA列的数值而非字符串
test <- test %>% 
  mutate(across(all_of(right_side),
                ~ if(is.na(.x) & (right == .data[[left_side]])) replace_na(.x,0) else .x))

补充说明

  • 使用.data[[left_side]]可以通过字符串变量正确引用数据框中的对应列,实现数值和数值的比较。
  • 修正后,当某行的right(EltA1和EltA2的求和)等于该行的EltA值时,会将该行中right_side里的NA替换为0,符合你的逻辑需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:40:02