分配给R中的可变数据框
Assign to a variable data frame in R
我正在尝试将一列数据分配给现有数据框中的新列。数据框循环变化,从scores.d到scores.e。我想要的输出是用 vals 填充 scores.X$new.col,其中 X 被当前的 dfname 替换。
dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 10:20)
vals <- 60:70
for (i in seq_along(dfnames)){
assign(get(paste0("scores.",dfnames[i]))$new.col,vals)
}
Error in assign(get(paste0("scores.", dfnames[i]))$new.col, vals) :
invalid first argument
这给了我一个错误,因为当我需要它包含列名时,assign 正在寻找一个字符串作为第一个参数。简单地将 $new.col 添加到粘贴命令是行不通的(假设 $ 不从字符串翻译)。
我是 R 的新手,不知道赋值的注意事项。我想制作一个数据框列表,然后用 vals 填充每个数据框,但它不起作用,因为我指定了特定的列,在我的真实数据中,数据框无论如何都是预先存在的,我只是想添加到它们这里。想法?
编辑*
@Jason 提供了一个答案,将值分配给一个临时变量,然后再分配回来。对于我的目的来说工作正常,但是我已经尝试使用字符串列表来代替通过 paste0()
创建名称,它仍然给了我错误。首先,杰森的工作答案:
dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70
for (i in dfnames){ #don't need seq_along
dat<-get(paste0("scores.",i)) #pull up the data
dat$new.col<-vals
assign(paste0('scores.',i),dat) #replace old data frame with new
}
现在用名称列表替换粘贴程序(注意对 seq_along 的更改):
dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70
# for demonstrative purposes only, these were created in a loop in my code
full.dfnames[1] <- "Scores.d"
full.dfnames[2] <- "Scores.e"
for (i in seq_along(dfnames)){ #added seq_along back for the name index
dat<-get(full.dfnames[i]) #pull up the data
dat$new.col<-vals
assign(full.dfnames[i],dat) #replace old data frame with new
}
>Error in assign(get(paste0("scores.", dfnames[i]))$new.col, vals) :
invalid first argument
我相信以下作品可能没有您想要的那么精简。
dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70
for (i in dfnames){ #don't need seq_along
dat<-get(paste0("scores.",i)) #pull up the data
dat$new.col<-vals
assign(paste0('scores.',i),dat) #replace old data frame with new
}
我正在尝试将一列数据分配给现有数据框中的新列。数据框循环变化,从scores.d到scores.e。我想要的输出是用 vals 填充 scores.X$new.col,其中 X 被当前的 dfname 替换。
dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 10:20)
vals <- 60:70
for (i in seq_along(dfnames)){
assign(get(paste0("scores.",dfnames[i]))$new.col,vals)
}
Error in assign(get(paste0("scores.", dfnames[i]))$new.col, vals) :
invalid first argument
这给了我一个错误,因为当我需要它包含列名时,assign 正在寻找一个字符串作为第一个参数。简单地将 $new.col 添加到粘贴命令是行不通的(假设 $ 不从字符串翻译)。
我是 R 的新手,不知道赋值的注意事项。我想制作一个数据框列表,然后用 vals 填充每个数据框,但它不起作用,因为我指定了特定的列,在我的真实数据中,数据框无论如何都是预先存在的,我只是想添加到它们这里。想法?
编辑*
@Jason 提供了一个答案,将值分配给一个临时变量,然后再分配回来。对于我的目的来说工作正常,但是我已经尝试使用字符串列表来代替通过 paste0()
创建名称,它仍然给了我错误。首先,杰森的工作答案:
dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70
for (i in dfnames){ #don't need seq_along
dat<-get(paste0("scores.",i)) #pull up the data
dat$new.col<-vals
assign(paste0('scores.',i),dat) #replace old data frame with new
}
现在用名称列表替换粘贴程序(注意对 seq_along 的更改):
dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70
# for demonstrative purposes only, these were created in a loop in my code
full.dfnames[1] <- "Scores.d"
full.dfnames[2] <- "Scores.e"
for (i in seq_along(dfnames)){ #added seq_along back for the name index
dat<-get(full.dfnames[i]) #pull up the data
dat$new.col<-vals
assign(full.dfnames[i],dat) #replace old data frame with new
}
>Error in assign(get(paste0("scores.", dfnames[i]))$new.col, vals) :
invalid first argument
我相信以下作品可能没有您想要的那么精简。
dfnames <- c("d","e")
scores.d <- data.frame(x = 1, y = 1:10)
scores.e <- data.frame(x = 2, y = 11:20)
vals <- 61:70
for (i in dfnames){ #don't need seq_along
dat<-get(paste0("scores.",i)) #pull up the data
dat$new.col<-vals
assign(paste0('scores.',i),dat) #replace old data frame with new
}