R将字符转换为dataframe列名,然后替换列中的值

时间:2015-01-27 21:29:43

标签: r eval assign

我能够获得字符变量b指向的列的内容。但我想制作专栏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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

abc[, b] <- 0

abc[[b]] <- 0

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