基于另一列跨时间序列列替换值

Replace values across time series columns based on another column

我的问题与另一个类似:

但是我需要根据来自另一列的向量而不是 NA 或常量来替换值。

你能帮忙吗?

#there are many more yrs in the data set
yr1<-c("1","missing")
yr2<-c("3","4")
right<-c("2","3")
df<-data.frame(yr1,yr2,right)

df<-df %>%
  mutate(
      across(starts_with('yr'), ~replace(.x, ~.x=="missing", right) ))

其中 right 是我要“查找”值以替换“缺失”值的另一列。

使用 ifelse 而不是 replace 应该可以解决您的问题。

library(dplyr)

df %>%
  mutate(across(starts_with('yr'), ~ifelse(.x=="missing", right, .x)))

#  yr1 yr2 right
#1   1   3     2
#2   3   4     3

一般来说,我建议仅当您有一个固定(恒定)值来替换所有其他值时才使用 replace,使用 ifelse 更好。

base R 选项:

cols <- grep("^yr\d+$", names(df))
df[cols][df[cols] == "missing"] <- df[df[cols] == "missing", "right"]

输出:

  yr1 yr2 right
1   1   3     2
2   3   4     3