读取R中的值序列
通过将每个文件中的数据存储为列表中的数据框,我已经阅读了一系列332个文件,如下所示读取R中的值序列,r,R,通过将每个文件中的数据存储为列表中的数据框,我已经阅读了一系列332个文件,如下所示 files <- list.files() data <- list() for (i in 1:332){ data[[i]] = read.csv(files[[i]]) } 文件每次迭代j=1:10时,您将data[[j]]$city分配给对象req.data。这样做时,对于步骤j=2:10,您正在用jth数据集的内容覆盖req.data的早期版本。因此,req.data在任何时候都只包
files <- list.files()
data <- list()
for (i in 1:332){
data[[i]] = read.csv(files[[i]])
}
文件每次迭代j=1:10
时,您将data[[j]]$city
分配给对象req.data
。这样做时,对于步骤j=2:10
,您正在用j
th数据集的内容覆盖req.data
的早期版本。因此,req.data
在任何时候都只包含一个city
的数据,因此您得到的答案是错误的,因为您只计算了最后一个城市的平均值,而不是所有10个城市的平均值
还要注意,您可以执行mean(req.data,na.rm=TRUE)
来删除na
s
您可以使用lappy()
在用户R级别执行此操作,而无需显式循环,例如,使用虚拟数据
set.seed(42)
data <- list(data.frame(city = rnorm(100)),
data.frame(city = rnorm(100)),
data.frame(city = rnorm(100)))
mean(unlist(lapply(data, `[`, "city")), na.rm = TRUE)
因此,在您的情况下,您需要:
mean(unlist(lapply(data[1:10], `[`, "city")), na.rm = TRUE)
如果你想写一个循环,那么也许
req.data <- vector("list", length = 3) ## allocate, adjust to length = 10
for (j in 1:3) { ## adjust to 1:10 for your data / Q
req.data[[j]] <- data[[j]]$city ## fill in
}
mean(unlist(req.data), na.rm = TRUE)
> mean(unlist(req.data), na.rm = TRUE)
[1] -0.02177902
req.data感谢编辑帮助了我,因为我正在寻找一个带有循环实现的解决方案。还有一个问题是,当我把它放在一个函数中,将id和城市名称作为参数传递并执行它时,我得到NA作为答案,下面是警告消息警告消息:mean.default(unlist(req.data),NA.rm=TRUE):参数不是数字或逻辑:返回NA任何可能的原因。ThnxI会为此提出一个新问题;现在还不清楚你的函数是什么样子,或者你是如何调用它的。
mean(unlist(lapply(data[1:10], `[`, "city")), na.rm = TRUE)
req.data <- vector("list", length = 3) ## allocate, adjust to length = 10
for (j in 1:3) { ## adjust to 1:10 for your data / Q
req.data[[j]] <- data[[j]]$city ## fill in
}
mean(unlist(req.data), na.rm = TRUE)
> mean(unlist(req.data), na.rm = TRUE)
[1] -0.02177902
vec <- numeric(length = 3) ## allocate, adjust to length = 10
for (j in 1:3) { ## adjust to 1:10 for your question
vec[j] <- mean(data[[j]]$city, na.rm = TRUE)
}
mean(vec)