【问题标题】:How to update variable values in data frame using function in R?如何使用 R 中的函数更新数据框中的变量值?
【发布时间】:2016-12-03 20:38:39
【问题描述】:

我创建了以下函数来更新数据框中的一些变量。它不会更新变量,而是创建新变量。我不确定为什么将 P1SEG1P1SEG2 传递给 var1var2 不起作用。

数据框:

df <-   read.table(text="   PROD    P1SEG1  P1SEG2  
                      1 1   0   
                 2  0   0   
                 3  0   0   
                 1  1   0   
                 2  0   0   
                 3  0   0   ", header=T)

功能:

Chg.var.df <- function(data, prod, var1, var2){
  data$var1[data$PROD == prod] <- -1
  data$var2[data$PROD == prod] <- -1
  return(data)
}

结果:

Chg.var.df(df, 1, P1SEG1, P1SEG2)

  PROD P1SEG1 P1SEG2 var1 var2
1    1      1      0   -1   -1
2    2      0      0   NA   NA
3    3      0      0   NA   NA
4    1      1      0   -1   -1
5    2      0      0   NA   NA
6    3      0      0   NA   NA

【问题讨论】:

  • 你不应该使用$var1,而应该如下使用它:data[data$PROD == prod, var1] &lt;- -1
  • @ProcrastinatusMaximus 我收到此错误Error in [(*tmp*, data$PROD == prod, var1, value = -1) : duplicate subscripts for columns

标签: r function variables dataframe


【解决方案1】:

当您想将变量传递给var1 时,最好不要在函数内使用$var1。相反,您应该按如下方式使用它:

Chg.var.df <- function(data, prod, var1, var2){
  data[data$PROD == prod, var1] <- -1
  data[data$PROD == prod, var2] <- -1
  return(data)
}

现在使用Chg.var.df(df, 1, 'P1SEG1', 'P1SEG2') 调用函数将导致:

  PROD P1SEG1 P1SEG2
1    1     -1     -1
2    2      0      0
3    3      0      0
4    1     -1     -1
5    2      0      0
6    3      0      0

【讨论】:

    【解决方案2】:

    该函数也可以通过遍历“var”列来简化

    Chg.var.df <- function(data, prod, var1, var2){
         varNew <- c(var1, var2)
         data[varNew] <- lapply(data[varNew], replace,  list = data$PROD==prod, values =-1)
         data
     }
    

    通过调用函数

    Chg.var.df(df, 1, 'P1SEG1', 'P1SEG2')
    #   PROD P1SEG1 P1SEG2
    #1    1     -1     -1
    #2    2      0      0
    #3    3      0      0
    #4    1     -1     -1
    #5    2      0      0
    #6    3      0      0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多