首页 > 解决方案 > 创建一个for循环以对数据框中的列值求和

问题描述

我是 r 的新手,所以我很难弄清楚这一点。我有一个数据框,我想创建一个带有for循环的向量,称为"SumQuadCol",其中 SumQuadCol[j] = 如果列类是数字,则列中包含的值的平方,并且 SumQuadCol[j] =如果类不是数字,则为 NA。

我试过这样的事情:

for (j in 1: ncol(dat)){
  if (is.numeric(ncol(dat[j]))){
    SumQuadCol <- (colSums(is.numeric(dat[j]))) ^2
  }else {
    (SumQuadCol = NA)}
}

但它不起作用。

标签: r

解决方案


创建一个向量来存储结果,用于dat[[j]]访问列的值。使用iris数据集 -

dat <- iris

SumQuadCol <- numeric(length(dat))

for (j in seq_along(dat)) {
  if (is.numeric(dat[[j]])) {
    SumQuadCol[j] <- sum(dat[[j]]^2)
  }else {
    SumQuadCol[j] = NA
  }
}

SumQuadCol
#[1] 5223.85 1430.40 2582.71  302.33      NA

您还可以使用sapply-

sapply(dat, function(x) if(is.numeric(x)) sum(x^2) else NA)

#Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
#     5223.85      1430.40      2582.71       302.33           NA 

推荐阅读