我有一个非常大的数据集,我正在尝试获取值的总和。变量是二进制的,有 0 和 1。
不知何故,当我运行一个 for 循环
for (i in 7:39){
agegroup1[53640, i]<-sum(agegroup1[, i])
}
循环处理,但除了第一列之外的所有内容都只包含 NA。我尝试调用这些值并且会看到 0 和 1,以及检查类(它返回“整数”)。但是当把它全部加起来时,R 不起作用。
有什么建议吗?
我有一个非常大的数据集,我正在尝试获取值的总和。变量是二进制的,有 0 和 1。
不知何故,当我运行一个 for 循环
for (i in 7:39){
agegroup1[53640, i]<-sum(agegroup1[, i])
}
循环处理,但除了第一列之外的所有内容都只包含 NA。我尝试调用这些值并且会看到 0 和 1,以及检查类(它返回“整数”)。但是当把它全部加起来时,R 不起作用。
有什么建议吗?
cs <- colSums(agegroup1[, 7:39])
将为您提供不循环的列和向量(在 R 级别)。
如果您有任何缺失值(NA
s),agegroup1[, 7:39]
那么您可能需要添加na.rm = TRUE
到colSums()
调用(甚至是您的sum()
调用)中。
你没有说它是什么agegroup1
或它有多少行等,但要最终确定你的循环正在做什么,你需要
agegroup1[53640, 7:39] <- cs
在您开始添加列总和agegroup1[53640, ]
之前有什么?NA
? 如果是这样,那将解释一些行为。
不过,我们确实需要更多细节……
@Gavin Simpson 提供了一个可行的解决方案,但您也可以使用 apply。此函数允许您将函数应用于行或列边距。
x <- cbind(x1=1, x2=c(1:8), y=runif(8))
# If you wanted to sum the rows of columns 2 and 3
apply(x[,2:3], 1, sum, na.rm=TRUE)
# If you want to sum the columns of columns 2 and 3
apply(x[,2:3], 2, sum, na.rm=TRUE)