我正在尝试创建一个新的数据框列,并在for循环中为其赋值。
具体来说,我有一个数据框名称列表,我逐个循环遍历此列表。对于每个名称,我想为该数据框创建一个列$location
,并且我想为其分配一个值。为简单起见,假设我想指定它NA
。下面的代码解释了我正在尝试做什么。但是,当我运行它时,我收到错误Error in assign(get(name)$location, NA) : invalid first argument
names<-c("europe", "africa", "asia")
# where each of the strings in `names` is the name of an existing data frame object
# for sake of example, code is provided below to create example data frame objects
x <- c(2,6,7)
y <- c(40, 42, 14)
europe <- data.frame(x,y)
africa <- data.frame(x,y)
asia <- data.frame(x,y)
for (name in names) {
assign(get(name)$location, NA)
}
我的目标是在每个数据框中获取一个名为location的新列。我不知道如何纠正这个或为什么会发生这种情况。任何帮助将不胜感激。
答案 0 :(得分:1)
如果您尝试使用代码,我会获得Error in get(name) : object 'europe' not found
所以我不能添加一些甚至不是对象的东西。
我会尝试类似的东西
for (k in length(names)) {
location <- c(data1, data2)
assign(names[k], location)
}
然后转换为您想要的格式,因此as.data.frame
将在此之后起作用
编辑:玩一下(并思考)它似乎无法像这样改变列值。在帮助页Assign a value to a name in an environment.
中,这不是您要实现的目标,要更改列的值,我会将此列rbind
添加到数据或subs
。
答案 1 :(得分:-2)
for (k in names) {
assign(names[k], cbind(names[k], data.frame(location = NA)))
}