对数据帧因子列的操作

时间:2013-10-22 08:24:38

标签: r dataframe

我不想在循环中执行操作,我的数据看起来像这样

 dfU[4:7]
      vNeg neg pos vPos
 1      0  35  28    0
 2      0  42  26    0
 3      0  77  59    0
 4      0  14  24    0
 5      0  35  45    0
 6      0  17  12    0
 7      0  31  23    0
 8      0  64  52    1
 9      0  15  17    0
 10     0  21  29    0

当我执行这样的某些操作但得到错误的结果可能只是因为我尝试使用 转换进行转换,但得到的错误对因素没有意义

  b<-as.numeric(((as.numeric(dfU[,4])*-5)+(as.numeric(dfU[,5])*-2)+(as.numeric(dfU[,6])*2)+(as.numeric(dfU[,7])*5)))
  b 
  [1] -14 -32 -16  18   8  -8 -18  -7   6  14  24  -9   0 

错误可能只是因为我将整数转换为数字

   typeof(dfU[,4])
   [1] "integer"
   as.numeric(dfU[,4])
   [1] 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1
   k<-transform(dfU, (vNeg*(-5))+(neg*(-2))+(pos*2)+(vPos*5))
   not meaningful for factors

我希望数据框中的第8列作为分数,我想避免循环,是他们在列上执行操作的更好方法,在这方面有任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

最好的办法是避免获得第4名。如果这不是您想要的因素,则列为因子。 但仍有一种解决方法是使用as.numeric(as.character( ))。假设“a”是你的第4栏,你的情况就是这样:

> a <- as.factor(c(rep(0,7),1,rep(0,2)))
> a
 [1] 0 0 0 0 0 0 0 1 0 0
Levels: 0 1
> as.numeric(a)
 [1] 1 1 1 1 1 1 1 2 1 1

解决方法确实如此:

> as.numeric(as.character(a))
 [1] 0 0 0 0 0 0 0 1 0 0