【问题标题】:R convert character to dataframe column name and then replace values in a columnR将字符转换为数据框列名,然后替换列中的值
【发布时间】:2015-01-27 21:29:43
【问题描述】:

我能够得到字符变量 b 指向的列的内容。但我想将列 emp 设为 0。我该怎么做?

emp=c(1,2,30)
abc=data.frame(emp)
b="emp"
#below line gives content of column emp
eval(parse(text=paste("abc$", b, sep = "")))
#how can i replace each value in column emp with 0?
#below line doesnt work :(. It runs without error but values dont change 
assign((text=paste("abc$", b, sep = "")),0)
abc

【问题讨论】:

  • 你可以用abc$emp替换eval(parse(text=paste("abc$", b, sep = "")))
  • 我猜,你做这么复杂的事情是有特殊原因的?
  • 我不能做 abc$emp 因为我不会知道列名。列名会一直变化,会保存在变量b中

标签: r eval assign


【解决方案1】:

除了琐碎的abc[,'emp'] <- 0,你还可以这样做:

eval(parse(text=sprintf('%s$%s <- 0','abc',b)))

abc
#  emp
#1   0
#2   0
#3   0

【讨论】:

    【解决方案2】:

    几乎没有充分的理由使用eval(parse())$ 语法应该只在您知道要提取的确切名称时使用。如果要使用变量指定该值,请使用[,] 索引方法。例如

    abc[, b] <- 0
    

    abc[[b]] <- 0
    

    疯狂的分配不起作用,因为abc$b 不是变量。这实际上是一个类似于'$'(abc, "b") 的函数调用。您需要传入要分配的变量的名称,而不是表达式。

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 2014-02-06
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2019-08-18
      • 2021-06-15
      相关资源
      最近更新 更多