这是我的数据框:
col_1 <- c(1,2,NA,4,5)
temp_col_1 <-c(12,2,2,3,4)
col_2 <- c(1,23,423,NA,23)
temp_col_2 <-c(1,2,23,4,5)
df_test<-data.frame(col_1,temp_col_1,col_2, temp_col_2)
在列
col_1
中,我想用NA
中的相应值替换temp_col_1
,并对col_2
和temp_col_2
进行相同操作我知道如何使用
ifelse
语句手动进行操作,问题是我有大量的模式为col_name
和temp_col_name
的列,我想知道如何实现它的自动化。我尝试了诸如
df_test[,paste('temp_','col_1
]'之类的其他方法,但是没有任何效果。有什么建议?
最佳答案
# list of columns we need to check for NA's
col.to.check <- colnames(df_test)[!grepl("^temp", colnames(df_test))]
# these columns need not be checked
col.to.keep <- colnames(df_test)[grepl("^temp", colnames(df_test))]
func <- function(x){
y <- which(is.na(df_test[[x]])) # which position do NA's exist
z <- df_test[[paste0("temp_", x)]][y] # which to be used to replace
df_test[[x]][y] = z # replace them
return(df_test[[x]])
}
df = data.frame(lapply(col.to.check, func))
colnames(df) = col.to.check
cbind(df, df_test[col.to.keep])
# col_1 col_2 temp_col_1 temp_col_2
#1 1 1 12 1
#2 2 23 2 2
#3 2 423 2 23
#4 4 4 3 4
#5 5 23 4 5
关于r - 根据名称中的模式更新成对的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41471757/