将扫描函数应用于数据集时如何排除列

时间:2014-10-23 12:15:29

标签: r

我试图从R中的内置longley数据集的每一列中减去均值(使用扫描函数),除了'Year'列。 我试过了

sweep(apply(longley,2,mean),2,-c["Year"])

但是给了我错误

Error in c["Year"] : object of type 'builtin' is not subsettable

这似乎是一个简单的问题,但我无法弄清楚如何排除此功能中的“年份”列

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用以下方式执行此操作:

  nm1 <- setdiff(colnames(longley), "Year")
  res1 <- longley[nm1]-colMeans(longley[nm1])[col(longley[nm1])]

或使用sweep

 res2 <- sweep(longley[nm1], 2, FUN=`-`, apply(longley[nm1], 2, mean))
 identical(res1, res2)
 #[1] TRUE

或者您可以将apply替换为colMeans

 sweep(longley[nm1], 2, FUN=`-`, colMeans(longley[nm1]))