【问题标题】:Strange error message whatever way I try to aggregate mean in R奇怪的错误消息,无论我尝试在 R 中聚合均值的方式
【发布时间】:2023-04-06 04:59:02
【问题描述】:

我正在制作一个模型来衡量品牌和驱动因素。我通过使用调查和因素分析来做到这一点。为了验证模型的稳定性,我制定了一个例程来引导整个调查。问题是当我尝试聚合时。我使用了包(hmisc)和(doBy)。无论我尝试过什么都没有用。现在,问题是仅意味着不起作用。标准偏差有效,最大有效等,但平均值产生相同的错误。 同样,我是 R 的初学者,所以请耐心等待。我可能在某个地方失败了。

代码如下:

agg<-summaryBy(t1+t2+t3+t4 ~ Brand, data = BTaggtot, 
     FUN = function(x) { c(m = mean(x), s = sd(x)) } )

##Warning message: In `[<-.factor`(`*tmp*`, ri, value = "") :   invalid factor level, NA generated

##  Brand   t1.m    t1.s    t2.m    t2.s    t3.m    t3.s    t4.m    t4.s
##1 x   NA  0.06916467  NA  0.06445095  NA  0.15462236  NA  0.14408303
##2 y   NA  0.12698044  NA  0.11589796  NA  0.11166112  NA  0.09784066
##3 z   NA  0.27728356  NA  0.31683492  NA  0.28952003  NA  0.25356425
##4 a   NA  0.06464727  NA  0.06261208  NA  0.13125807  NA  0.14010969
##5 b   NA  0.13333295  NA  0.13995869  NA  0.07081607  NA  0.05426994
##6 c   NA  0.17935163  NA  0.15829171  NA  0.17706202  NA  0.16386928

原始数据文件,它本身是引导数据的聚合:

    BTaggtot <- 
    structure(list(Brand = c("x", "y", "z", "a", 
    "b", "c", "x", "y", "z", "a", 

NA)), .Names = c("Brand", "t1", "t2", "t3", "t4"), row.names = c(NA, 
61L), class = "data.frame") 

BTaggtot$t1 <- as.numeric(as.character(BTaggtot$t1)) 
BTaggtot$t2 <- as.numeric(as.character(BTaggtot$t2)) 
BTaggtot$t3 <- as.numeric(as.character(BTaggtot$t3)) 
BTaggtot$t4 <- as.numeric(as.character(BTaggtot$t4)) 

输出:

##Brand t1.m    t1.s    t2.m    t2.s    t3.m    t3.s    t4.m    t4.s
##1 NA  NA  NA  NA  NA      NA  NA  NA
##2 x   0.19568792  0.011451510 0.04804116  0.014245490 0.158772048  0.09756682 -0.08942659 0.09520222
##3 y   0.33358223  0.013269567 -0.05392707 0.014502275 0.048156816 0.06733359  -0.12412978 0.05822441
##4 z   0.14213090  0.057348103 0.21348340  0.081216793 0.247131971 0.06523768  0.15880299  0.07527778
##5 a   0.05697128  0.011903945 -0.06825173 0.010993725 -0.128795343    0.08287723  -0.33948934 0.08403221
##6 b   0.33710639  0.006427330 -0.10283455 0.009699357 0.003772128 0.02699491  0.07900255  0.02691813
##7 c   -0.47443412 0.008258243 0.08995661  0.010455134 -0.041590502    0.11071262  0.23812028  0.10615406

【问题讨论】:

    标签: r aggregate mean


    【解决方案1】:

    我的猜测是数据是因素。 sd() 可以处理因素,mean() 不能。根据您的问题,可能的帮助可能是在读取数据时,在读取函数中使用stringsAsFactors=F

    【讨论】:

    • 抱歉,在读取 .csv 文件时尝试过。那里有很多计算,所以我不知道在读取原始数据文件时将表达式放在哪里。至少那不起作用
    • 然后尝试在summaryBy之前通过as.numeric()改变t的类。
    • 很抱歉打扰您,但是在代码中会怎样呢? (谢谢)
    • 试试 BTaggtot$t1
    【解决方案2】:

    我同意问题很可能是您的数据存储为factors。但是,使用strinsAsFactors=F 可能无法解决问题。这是因为如果您的数据中有 字符串,那么使用 stringsAsFactors=F 将阻止数据成为因子,但在这种情况下,它们将存储为 character,这对于计算仍然不是很有用mean。所以我认为有几件可能的事情需要检查。

    确保t1t2t3t4 中的数据不包含任何字符串

    如果您有缺失值,请确保它们由 NA 表示,而不是其他格式

    当你读入你的数据时,使用stringsAsFactors=F

    检查它现在是否有效,但使用

    mean(x, na.rm=TRUE)
    

    如果仍然无法正常工作,请将您的数据列按列转换为数值按

    df$t1 <- as.numeric(as.character(df$t1))  #and so on, for t2, t3, t4
    

    【讨论】:

    • 奇怪的是后者似乎工作,但是,它产生了一个额外的行。为什么????谢谢顺便说一句。这就是它的样子。品牌 t1.m t1.s t2.m 1 NA NA NA NA 2 x 0.19568792 0.011451510 0.04804116 3 y 0.33358223 0.013269567 -0.05392707 4 z 0.14213090 0.0573848103 0.0573848103
    • 如果您复制“dput(youroriginaldata)”的输出并将其粘贴到您的问题中(而不是在 cmets 中),诊断问题会容易得多。
    • 谢谢!不好意思,我是这个论坛的新海报。再次感谢。
    • 没问题,但你添加的不是我的意思。使用函数dput(df) 其中df 是您的原始数据的名称,在您进行聚合步骤并将输出粘贴到您的答案之前(它看起来好像不可读,但它可以很容易地复制到任何其他 R 会话)
    • 好的!我运行 dput(BTaggtot) 并将结果粘贴到窗口中。即使我缩进了,我也没有得到花哨的代码风格。对不起。我认为您无论如何都可以看到输出和文件特征。 BR 马耳他
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多