tapply中的错误:参数长度必须相同。

3

我已经从一个csv文件中将一组数据作为数据帧导入R。起初,我遇到了以下错误信息:

> data<-read.csv("D:/research/PhD 2014/Data/anaesthesia trials/anaesthesia    times.csv", header=TRUE)
> str(data)
'data.frame':   80 obs. of  10 variables:
$ chemical: Factor w/ 2 levels "aquis","benzocaine": 1 1 1 1 1 1 1 1 1 1 ...
$ Fish    : int  1 2 3 4 5 6 7 8 9 10 ...
$ Dose    : int  10 10 10 10 10 10 10 10 10 10 ...
$ X1      : int  442 0 0 0 0 0 0 0 0 0 ...
$ X2      : int  600 0 0 0 0 0 0 0 0 0 ...
$ X3a     : int  885 0 0 0 0 0 0 0 0 0 ...
$ X3b     : int  0 0 0 0 0 0 0 0 0 0 ...
$ Recovery: int  650 0 0 0 0 0 0 0 0 0 ...
$ wt..g.  : num  0.19 0 0 0 0 0 0 0 0 0 ...
$ tl..mm. : int  35 0 0 0 0 0 0 0 0 0 ...
> Mean<-tapply(data$x1,data$Dose, mean)
 Error in tapply(data$x1, data$Dose, mean) : 
    arguments must have same length
> length(data$Dose)
 [1] 80
> length(data$x1)
 [1] 0
> dim(data$x1)
 NULL

我怀疑这是因为存在缺失值。然而,这些缺失值并不是真正的缺失值,它们是实际的0。我已经在其他论坛上搜索了错误和“tapply”函数,并从“R初学者指南”中复制了代码并用自己的数据替换了它。
我的另一个担忧比缺失的0更为严重,就是根据length()函数,“x1”的长度为0...
我很困惑,因为我已经回去检查了.csv文件,尝试将其保存为另一个.csv文件,但似乎没有任何变化。我已经确保在.csv本身中将单元格格式更改为“数字”,但似乎并没有帮助。R是否由于某种原因无法识别数据?
我可以提供问题的.csv文件,只是不确定最好的方法是什么。
3个回答

3

tapply调用中应使用data$X1(大写字母X)。在R中名称是区分大小写的。如果有效,请告诉我们。


0
尝试将输入数据转换为数据框(data.frame())。这对我解决了类似的错误。

当您将tapply函数应用于非数据帧对象时,该方法有效,因此在tapply之前使用as.data.frame(yourdata)setDF(yourdata)会是一种更安全的方式。 - Jason Goal

0

函数tapply需要一个因子变量来分组结果。在你的例子中,INDEX变量data$Dose是整数。

尝试:

data[, Dose] <- as.factor(data[, Dose])
Mean <- tapply(data$X1, data$Dose, mean)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接