我使用for循环在R中工作,以创建新的向量。 '文件'包含多个或多或少500行的多个数据框。
temp = list.files(pattern="*txt")
files = lapply(temp, read.delim)
pos = c(1:100)
results = null
for (i in pos) {
nameA = paste("A", i, sep = "_")
nameC = paste("C", i, sep = "_")
resA = assign(nameA, unlist(lapply(files, function(x) x$perA[x$position==i])))
resC = assign(nameC, unlist(lapply(files, function(x) x$perC[x$position==i])))
cbind(summary(resA), results) #incorrect
cbind(summary(resC), results) #incorrect
}
现在我想表演'摘要'在resA& resC为' pos'中的所有值。我想将这些结果放在1个数据帧(结果)中。我现在该怎么办?
答案 0 :(得分:1)
沿着这些方向:
# create a data.frame with 6 rows( since summary() returns a vector of 6 elements
df <- data.frame(1:6)
# set the rownames of df
rownames(df) = names(summary(1:6))
for (i in pos) {
nameA = paste("A", i, sep = "_")
...
xA = unlist(lapply(files, function(x) x$perA[x$position==i]))
xC = unlist(lapply(files, function(x) x$perC[x$position==i]))
df = cbind(df, as.numeric(summary(xA)), as.numeric(summary(xC)))
assign(nameA, xA)
assign(nameC, xC)
}
# set the column names of df
df[1] = NULL # initial column removed
colnames(df) = c("id", paste0("summary",c("A","C"), rep(1:100, each = 2)))
答案 1 :(得分:0)
是否有理由单独保存每个向量而不是列表内?这将使进一步分析更容易。
我们仍然可以将您的矢量合并到summary
的单个列表中。然后将cbind()
函数应用于此列表,并使用list_A <- mget(ls(pattern="A_[0-9]"))
list_C <- mget(ls(pattern="C_[0-9]"))
summary_A <- do.call(cbind,lapply(list_A,summary))
summary_C <- do.call(cbind,lapply(list_C,summary))
summary_All <- data.frame(summary_A, summary_C)
将结果合并为一个矩阵。
{{1}}
当然,在环境中是否有其他具有相同命名模式的对象时,必须要小心。