-1

我有这个数据。

str(x1);
'data.frame':   163 obs. of  4 variables:
$ Cage    : int  4055 4055 4055 4055 4055 4055 4055 4055 4055 4055 ...
$ LineName: int  1 7 2 8 3 9 4 10 5 11 ...
$ Result  : Factor w/ 2 levels "2","1": 2 2 2 1 1 2 1 2 2 1 ...
$ Pool    : Factor w/ 1 level "High": 1 1 1 1 1 1 1 1 1 1 ...
- attr(*, "na.action")=Class 'omit'  Named int [1:45] 83 165 173 176 186 187 188 189 190 191 ...
.. ..- attr(*, "names")= chr [1:45] "83" "165" "173" "176" ..

我想取 x1$Result 的平均值。当我这样做时,我明白了。

mean(x1$Result)
[1] NA
Warning message:
In mean.default(x1$Result) : argument is not numeric or logical: returning NA

我该怎么做才能得到平均值?我认为这与因素/水平有关。

4

1 回答 1

1

评论提出了一个很好的解决方案,但你在 x1$result 中有一个因素的原因可能更有趣。

将某些内容转换为 data.frame 时,默认情况下将字符串视为因素,而不是强制转换为数字。当您读取数据时,x1$Pool 列具有字符类型。矩阵仅包含一种数据类型,因此您的整个矩阵都转换为字符矩阵。将其转换为 data.frame 将导致每列成为一个因素而不是数字。

于 2014-09-16T00:04:30.250 回答