我一般对R和编码都很陌生,因此对于可能看起来很愚蠢的事情,我事先表示歉意。
我进行了方差分析,并希望对我的数据进行TukeyHSD。起初,它工作正常。然后,我创建了两个数据集。在每一种药物中,我对数据进行排序以仅包括两种剂量类型之一。然后,我继续执行ANOVA(有效),但是Tukey会产生此错误
-[。data.frame`(mf,mf.cols [[i]]):已选择未定义的列。
那是什么意思?我在新创建的数据集中搜索列的名称,它们都存在。
非常感谢您!
这是我创建的数据集和收到的错误。
df1 <- Flor_Group_1_2019_EC[Flor_Group_1_2019_EC$Dose=="IM", ]
df2 <- Flor_Group_1_2019_EC[Flor_Group_1_2019_EC$Dose=="SC", ]
aov1 = aov(`CFU/g`~Treatment+`Time Point`, data=df1)
summary(aov1)
Df Sum Sq Mean Sq F value Pr(>F)
Treatment 3 3.068e+15 1.023e+15 7.774 7.98e-05 ***
`Time Point` 16 2.065e+16 1.291e+15 9.810 7.20e-16 ***
Residuals 134 1.763e+16 1.316e+14
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
1 observation deleted due to missingness
TukeyHSD(aov1)
[.data.frame
(mf,mf.cols [[i]])中的错误:未定义的列已选中
colnames(df1)
[1] "Steer" "Dose" "Time Point" "Treatment" "Average"
[6] "CFU/g" "Log"
答案 0 :(得分:0)
经过一些旧的source code之后,我发现这与数据集中的命名有关。
这是因为对于我的数据(如本文中的数据),命名约定不是非常友好。尽管我们可以在(``)
上添加“反引号” names
,但是在使用基于base
R的函数进行编程时,有时很难使用那些反引号。然后解决方案是rename
,如下所示:
# base
names(df1) <- gsub("CFU\\/g","CFU",names(df1))
names(df1) <- gsub("Time Point","time",names(df1))
# tidyverse
dplyr::rename(df1, CFU = `CFU/g`,
time = `Time Point`)
然后您可以重建模型并重做TukeyHSD
:
df1 <- Flor_Group_1_2019_EC[Flor_Group_1_2019_EC$Dose=="IM", ]
df2 <- Flor_Group_1_2019_EC[Flor_Group_1_2019_EC$Dose=="SC", ]
aov1 = aov(CFU~Treatment+ time , data=df1)
TukeyHSD(aov1)
注意:我无法提供可复制的示例,因为我无法轻松创建示例数据集。但是,我确实按照此答案中所述解决了这个问题。