我想循环遍历各个数据框(不在列表中)并为每个df附加一列,以便附加列是原始df中第一列的副本。
对于df x:
> x
V1 V2 V3
1 1 2 3
2 1 2 3
3 1 2 2
4 1 2 2
5 1 1 1
所需的输出将是:
> x
V1 V2 V3 newCol
1 1 2 3 1
2 1 2 3 1
3 1 2 2 1
4 1 2 2 1
5 1 1 1 1
我尝试使用这个循环:
filenames <- names(which(sapply(.GlobalEnv, is.data.frame)))
for(x in seq_along(filenames)){
filenames[x]$newCol <- x[,1]
}
但发生错误:
x [,1]出错:维数不正确
答案 0 :(得分:2)
像这样:
要变量文件名[x]赋值,即第一列的数据框:)
assign(filenames[x], data.frame(get(filenames[x]),get(filenames[x])[,1]))
答案 1 :(得分:1)
或者,你可以写
for(i in seq_along(filenames)){
assign(filenames[i], `[[<-`(get(filenames[i]),'newCol',
value=get(filenames[i])[,1]))
}
类似于以下内容:
for(i in seq_along(filenames)) {
x <- get(filenames[i])
x$newCol <- x[, 1]
assign(filenames[i], x)
}
x1
# V1 V2 V3 newCol
#1 1 2 3 1
#2 1 2 3 1
#3 1 2 2 1
#4 1 2 2 1
#5 1 1 1 1
以上也可以写成:
x1 <- structure(list(V1 = c(1L, 1L, 1L, 1L, 1L), V2 = c(2L, 2L, 2L,
2L, 1L), V3 = c(3L, 3L, 2L, 2L, 1L)), .Names = c("V1", "V2",
"V3"), class = "data.frame", row.names = c("1", "2", "3", "4",
"5"))
x2 <- x1
filenames <- c("x1", "x2")