我有一个数据框" table"它有一个名称为" ID"的列。 " ID"的值从1到100.数据框还有一个名称为" weight"。
的列我有一个功能" calc_mean"它有一个变量来选择" ID":
calc_mean <- function(id=1:100)
当我调用我的函数时,我希望能够获取这个&#34; ID&#34;的子集,例如:
calc_mean(30:35)
这将需要计算我的列的平均值&#34;重量&#34;在我的函数中编写以下代码时:
mean(table$weight[,id])
但是我收到以下错误:
[1] NA 警告信息: 在mean.default(table $ weight [,id])中: 参数不是数字或逻辑:返回NA
有什么问题?
或者,如果我可以制作这个数据框的一个子集,我会很高兴#34; table&#34;进入另一个名为&#34; table2&#34;的数据框只有我感兴趣的ID。我会想到以下代码:
for(i in id){
table2 <- table[table$ID == i,]
}
接下来是:
mean(table2$weight)
然而,这给了我错误:
[1] NA 警告信息: 在mean.default(table2 $ weight)中: 参数不是数字或逻辑:返回NA
这里有什么问题?
=============================================== ==============================
抱歉,出于某些原因,我想首先隐藏我的真实代码,但现在会显示真实的代码:
pollutantmean <- function(dummy_dir, pollutant, id = 1:332) {
pollutant <- c("sulfate", "nitrate")
directory <- "C:\\Users\\kieken\\Dropbox\\science\\R programming\\specdata"
setwd(directory)
files <- list.files(directory)
data.list <- lapply(files, read.csv)
data.cat <- do.call(rbind, data.list)
good <- complete.cases(data.cat)
data.clean <- data.cat[good,]
data.ID <- subset(data.clean, ID %in% id)
mean(data.ID[,pollutant])
}
pollutantmean("specdata", "nitrate", 70:72)
此代码给出了以下错误:
[1] NA 警告信息: 在mean.default(data.ID [,污染物])中: 参数不是数字或逻辑:返回NA
答案 0 :(得分:1)
如果您只想计算平均值&#34;体重&#34;对于&#34; id&#34;的子集,您可以使用with
。以下代码计算给定范围内的平均权重&#34; id&#34;
# data example
table <- data.frame(id=1:100, weight=runif(100,60,95))
with(table, mean(weight[id %in% 30:35]))
答案 1 :(得分:0)
这必须计算我的专栏的平均值&#34;重量&#34;在我的函数中编写以下代码时:
mean(table$weight[,id])
这里的逗号没有意义。 table$weight
是一个向量,这意味着它只有一个维度,而不是两个维度。因此,您应该使用mean(table$weight[id])
。
for(i in id){ table2 <- table[table$ID == i,] }
接下来是:
mean(table2$weight)
请注意,每次在for
函数中循环时,您将table2
替换为table
与table2 <- table[id,]
不同的行。要创建子集,您可以使用
table2 <- subset(table, ID %in% id)
或
{{1}}