R中的计算列

时间:2010-06-24 03:01:56

标签: r

以下两个陈述之间有什么区别。他们正在呈现不同的结果,因为我试图从SPSS来到R,我有点困惑。

ds$share.all <- ds[132]/ ds[3]
mean(ds$share.all, na.rm=T)

ds$share.all2 <- ds$col1/ ds$Ncol2
mean(ds$share.all2, na.rm=T)

它们呈现相同的均值,但在第一个上,输出打印为

     col1    
     0.02669424 

,第二个只打印.02xxxxx。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:8)

用单括号表示数据框的列(您的第一个示例)会生成一个只包含该列的数据框,但使用$运算符(如第二个示例中所示)只是一个向量。如果有名称,则打印某些内容将打印与其关联的名称(第一个示例中为col1)。使用ds [132]获得的数据框具有name属性,但使用ds $ col1获得的向量却没有。 ds $ col1的等价物是使用double而不是单括号:ds [[132]]。例如:

> x<-data.frame(1:10)
> names(x)<-"var"
> class(x$var)
 [1] "integer"
> class(x[1])
[1] "data.frame"
> identical(x[1],x$var)
[1] FALSE
> identical(x[[1]],x$var)
[1] TRUE