r语言 - mutate_at函数取消前一个mutate_at



我通过唯一标识列合并 innov2015 和 innov2017 的两个数据帧来创建数据帧 S。innov2015 中的某些事例不包括在 innov2017 中,反之亦然,因此对于某些事例,S 中一半的变量都有 NA 条目。

我想计算 p = (p_2015+p_2017)/2 ,但是,当有一个 NA 条目时p_2015我希望 p = p_2017反之亦然。

我试图用:

    S <- merge(x = innov_2015_2, y = innov_2017_2, by = "cell_no", all = TRUE) %>%
  mutate(p = 0) %>%
  mutate_at(vars(p), funs(ifelse(is.na(smalln_2015), p_2017,(p_2015+p_2017)/2))) %>%
  mutate_at(vars(p), funs(ifelse(is.na(smalln_2017), p_2015,(p_2015+p_2017)/2))) %>%  

如果我跑

    S <- merge(x = innov_2015_2, y = innov_2017_2, by = "cell_no", all = TRUE) %>%
  mutate(p = 0) %>%
  mutate_at(vars(p), funs(ifelse(is.na(smalln_2015), p_2017,(p_2015+p_2017)/2))) %>%

p 取所需的值。

当我运行两个 mutate_at() 语句时

    S <- merge(x = innov_2015_2, y = innov_2017_2, by = "cell_no", all = TRUE) %>%
  mutate(p = 0) %>%
  mutate_at(vars(p), funs(ifelse(is.na(smalln_2015), p_2017,(p_2015+p_2017)/2))) %>%
  mutate_at(vars(p), funs(ifelse(is.na(smalln_2017), p_2015,(p_2015+p_2017)/2))) %>% 

第二个 mutate_at() 语句生成所需的值,但是它撤消了第一个 mutate_at() 语句,其中 p 采用了正确的值,现在有 NA

我需要做什么才能使两个 mutate_at() 语句都正常工作而不取消前一个语句?

这两者mutate冲突。您正在完全重新定义每个调用中的"p",因为第一次调用中的"p"值永远不会在第二次调用中重复使用。@Lennyy的评论将完成工作,但如果您想将此操作保持在整洁的宇宙中,使用 case_when 可能会有更好的运气。您的示例无法完全重现,因此以下是对它应该如何工作的猜测:

S <- merge(x = innov_2015_2, y = innov_2017_2, by = "cell_no", all = TRUE) %>%
  mutate(p = case_when(
    is.na(smalln_2015) ~ smalln_2017,
    is.na(smalln_2017) ~ smalln_2015,
    TRUE ~ (smalln_2015 + smalln_2017) / 2
  ))

相关内容

最新更新