基于另一列跨时间序列列替换值
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
我的问题与另一个类似:
但是我需要根据来自另一列的向量而不是 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