R 如何将数据帧传递到函数中并将输出放回数据帧中

R 如何将数据帧传递到函数中并将输出放回数据帧中,r,R,我有一个dataframe,在某个列中有一些缺少的值。我想通过比较不同列中的值来替换它们。我必须使用不同的列名在总代码中多次执行此操作。因此,我想构建一个函数,该函数执行以下操作: df # A B C # 1 "USA" 1999 # 2 NA 1999 # 3 "GER" 1999 # 3 "GER" 1999 否我想用“ABC”替换B列中所有A到2列中相等的值。在此处使用级别,因为一个列包含因子(?) 但我想把它

我有一个dataframe,在某个列中有一些缺少的值。我想通过比较不同列中的值来替换它们。我必须使用不同的列名在总代码中多次执行此操作。因此,我想构建一个函数,该函数执行以下操作:

df
#   A     B      C
#   1   "USA"   1999
#   2     NA    1999
#   3   "GER"   1999
#   3   "GER"   1999
否我想用“ABC”替换B列中所有A到2列中相等的值。在此处使用级别,因为一个列包含因子(?)

但我想把它放在一个函数中,因为在我的项目中有不同的数据集,它们有不同的名称和列名,以及不同的数字,可以转换成其他字符串,然后是“ABC”。那么,如何传入数据集和列的名称呢?这是我的尝试:

fun1 <- <- function(dataset,col1,col2) {
    levels(dataset$col1) <- c(levels(dataset$col1), "ABC")
    dataset$col1[dataset$col2==2]  <- "ABC"
    return(dataset)
}

fun1我们可以使用
[[
而不是
&
$
一样,它查找名为“col1”或“col2”的列,而不是与参数关联的值

fun1 <-  function(dataset,col1,col2) {
  levels(dataset[[col1]]) <- c(levels(dataset[[col1]]), "ABC")
  dataset[[col1]][dataset[[col2]]==2]  <- "ABC"
  return(dataset)
  }

fun1(df, "B", "A")
#  A   B    C
#1 1 USA 1999
#2 2 ABC 1999
#3 3 GER 1999
#4 3 GER 1999

fun1这很有帮助!谢谢!您必须以字符串/字符的形式传递列参数。请对此答案进行投票,因为我在这里没有足够的声誉来这么做!谢谢!@1Z3173C0D3。如果您想将其解析为无引号,则可能需要
deparse
替换
fun1 <- <- function(dataset,col1,col2) {
    levels(dataset$col1) <- c(levels(dataset$col1), "ABC")
    dataset$col1[dataset$col2==2]  <- "ABC"
    return(dataset)
}
 Error in levels(dataset$col1) <- c(levels(dataset$col1), "ABC") : 
      attempt to set an attribute on NULL
fun1 <-  function(dataset,col1,col2) {
  levels(dataset[[col1]]) <- c(levels(dataset[[col1]]), "ABC")
  dataset[[col1]][dataset[[col2]]==2]  <- "ABC"
  return(dataset)
  }

fun1(df, "B", "A")
#  A   B    C
#1 1 USA 1999
#2 2 ABC 1999
#3 3 GER 1999
#4 3 GER 1999
df <- structure(list(A = c(1L, 2L, 3L, 3L), B = structure(c(2L, NA, 
 1L, 1L), .Label = c("GER", "USA"), class = "factor"), C = c(1999L, 
 1999L, 1999L, 1999L)), row.names = c(NA, -4L), class = "data.frame")