如果我理解你的问题:
创建了三个parti
数据集
parti1 <- as.data.frame(matrix(5:25, ncol=3, dimnames=list(NULL, c("Col1", "Col2", "Time"))))
parti2 <- as.data.frame(matrix(1:15, ncol=3, dimnames=list(NULL, c("Col1", "Col2", "Time"))))
parti3 <- as.data.frame(matrix(1:15, ncol=3, dimnames=list(NULL, c("Col1", "Col2", "Time"))))
用于获取数据集的ls
值mget
例如,
ls(pattern="^parti") #gives you the created object names that starts with `parti` in the working environment.
#[1] "parti1" "parti2" "parti3"
lst1 <- mget(ls(pattern="^parti")) #mget will return a list of values of each `parti` object
如果您需要将Time
每个数据集的列更改为 1,有几种方法。下面的方法在列表环境中创建了列。要更改原始数据集,您必须执行assign
或list2env
Map(function(x, y) {x[,"Time"] <- y; x}, lst1, 1)
或者
lapply(lst1, function(x) {x$Time <-1; x}) #I am changing the existing `Time` column to 1 by using the assignment operator `<-`.
如果要创建新列,只需执行以下操作:
lapply(lst1, function(x) {x$Time1 <-1; x})
更新
如果您需要更改/创建原始数据集中的列,
partin <- paste0("parti", 1)
assign(partin, `[[<-`(get(partin),'Time', value=1))
上述方法以string
iepartin
作为第一个参数,并使用替换函数[[<-
。然后得到partin
use的值get
。下一个参数是要修改或创建的列,即。Time
并为该列分配一个值1
。
parti1
# Col1 Col2 Time
#1 5 12 1
#2 6 13 1
#3 7 14 1
#4 8 15 1
#5 9 16 1
#6 10 17 1
#7 11 18 1
对于多个数据集,要更改/创建现有列/新列,您可以使用for
循环assign
或使用list2env
partin1 <- paste0("parti", 1:3)
for(i in seq_along(partin1)){
assign(partin1[i], `[[<-`(get(partin1[i]), 'Time1', value=5)) #creating a new column
}
parti2
# Col1 Col2 Time Time1
#1 1 6 11 5
#2 2 7 12 5
#3 3 8 13 5
#4 4 9 14 5
#5 5 10 15 5
这也可以使用list2env
list2env(lapply(mget(partin1),
function(x) {x$Time2 <- 10 ;x}), envir=.GlobalEnv)
但是,我建议在列表中进行分析,而不是创建对象。
更新2
使用方法eval(parse
partin <- paste0("parti", 1)
toAssign <- paste0(partin, "[,'Time3']")
str1 <- paste0(toAssign, "<-", 15)
eval(parse(text=str1))
parti1
# Col1 Col2 Time Time3
#1 5 12 19 15
#2 6 13 20 15
#3 7 14 21 15
#4 8 15 22 15
#5 9 16 23 15
#6 10 17 24 15
#7 11 18 25 15
使用提供的示例数据集
toAssign <- paste0("Oldtbl", "[, 'Time']")
str1 <- paste0(toAssign, "<-", "'10:15'")
eval(parse(text=str1))
Oldtbl
# Name Gender Hobbies Time
#1 name FALSE singing 10:15
数据
Oldtbl <- structure(list(Name = "name", Gender = FALSE, Hobbies = "singing",
Time = "10:15"), row.names = c(NA, -1L), .Names = c("Name",
"Gender", "Hobbies", "Time"), class = "data.frame")