R将字符转换为数据框列名,然后替换列中的值
R convert character to dataframe column name and then replace values in a column
我能够得到字符变量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'] <- 0
,你还可以:
eval(parse(text=sprintf('%s$%s <- 0','abc',b)))
abc
# emp
#1 0
#2 0
#3 0
几乎没有理由使用 eval(parse())
。 $
语法只应在您确切知道要提取的名称时使用。如果要使用变量指定该值,请使用 [,]
索引方法。例如
abc[, b] <- 0
或
abc[[b]] <- 0
疯狂赋值不起作用,因为 abc$b
不是变量。这实际上是一个类似于'$'(abc, "b")
的函数调用。您需要传入要分配的变量的名称,而不是表达式。
我能够得到字符变量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'] <- 0
,你还可以:
eval(parse(text=sprintf('%s$%s <- 0','abc',b)))
abc
# emp
#1 0
#2 0
#3 0
几乎没有理由使用 eval(parse())
。 $
语法只应在您确切知道要提取的名称时使用。如果要使用变量指定该值,请使用 [,]
索引方法。例如
abc[, b] <- 0
或
abc[[b]] <- 0
疯狂赋值不起作用,因为 abc$b
不是变量。这实际上是一个类似于'$'(abc, "b")
的函数调用。您需要传入要分配的变量的名称,而不是表达式。