【问题标题】:error in tapply: arguments must have same lengthtapply 中的错误:参数必须具有相同的长度
【发布时间】:2015-06-04 13:02:27
【问题描述】:

我已将一组数据作为 .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 初学者指南”中复制了代码,并用我自己的数据替换了它。

我的另一个问题是,根据 length() 函数,'x1' 的长度为 '0'...

我很困惑,因为我返回并检查了 .csv 文件,尝试将其另存为另一个 .csv 文件,但似乎没有任何变化。我已确保将 .csv 本身中的单元格格式更改为“数字”,这似乎没有帮助。 R 是否因为某种原因无法识别数据?

我可以提供问题的 .csv 文件,只是不确定最好的方法是什么。

【问题讨论】:

    标签: r csv arguments tapply


    【解决方案1】:

    您应该在tapply 调用中使用data$X1(大写X)。 R 中的名称区分大小写。让我们知道它是否有效。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 当您将tapply 函数应用于非data.frame 对象时,此方法有效,因此as.data.frame(yourdata) 或setDF(yourdata) 在tapply 之前会更安全。
      【解决方案3】:

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

      试试:

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

      【讨论】:

        猜你喜欢
        • 2019-12-19
        • 1970-01-01
        • 2021-09-25
        • 2019-05-04
        • 2021-07-12
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        • 2019-03-01
        相关资源
        最近更新 更多