这是我的数据框:

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_2temp_col_2进行相同操作

我知道如何使用ifelse语句手动进行操作,问题是我有大量的模式为col_nametemp_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/

10-11 20:32