条件替换和删除列

时间:2017-11-29 21:09:23

标签: r if-statement dataframe

我有一个像这样的数据框:

replaceanddropcolumn <- data.frame("avariable"=10,
                                   "bvariable"=5,
                                   "cvariable"=2)

  avariable bvariable cvariable
1        10         5         2

我想使用grep函数查找数据框中是否存在cvariable,然后将cvariable替换为bvariable,最后从数据框中删除cvariable。所以最终的输出看起来像这样:

replaceanddropcolumn[["bvariable"]] <- replaceanddropcolumn[["cvariable"]]
replaceanddropcolumn[["cvariable"]] <- NULL

  avariable bvariable
1        10         2

我需要if语句的原因是,如果cvariable不存在,我想保留原始数据帧,例如。我有这样的数据框:

replaceanddropcolumn <- data.frame("avariable"=10,
                                   "bvariable"=5,
                                   "dvariable"=14)

谢谢!

1 个答案:

答案 0 :(得分:3)

我们可以使用if-else语句设计一个函数来完成此任务。

replace_fun <- function(df, target_column, replace_column){
  if (target_column %in% colnames(df)){
    df[[replace_column]] <- df[[target_column]]
    df[[target_column]] <- NULL
  }
  return(df)
}

replace_fun的第一个参数是数据框。第二个参数是目标列。第三个参数是替换列。

测试功能

replaceanddropcolumn1 <- data.frame("avariable"=10,
                                   "bvariable"=5,
                                   "cvariable"=2)

replaceanddropcolumn2 <- data.frame("avariable"=10,
                                   "bvariable"=5,
                                   "dvariable"=14)

replace_fun(replaceanddropcolumn1, "cvariable", "bvariable")

#   avariable bvariable
# 1        10         2

replace_fun(replaceanddropcolumn2, "cvariable", "bvariable")
#   avariable bvariable dvariable
# 1        10         5        14