r - 执行 TukeyHSD 时选择了未定义的列
问题描述
总的来说,我对 R 和编码非常陌生,所以对于任何看起来很愚蠢的事情,我提前道歉。
我执行了方差分析,并想对我的数据进行 TukeyHSD。起初,它工作得很好。然后我创建了两个数据集。在每一个中,我都对我的数据进行了排序,以仅包含两种剂量类型中的一种。然后我继续执行方差分析(有效),但是 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"
解决方案
在浏览了一些旧的源代码之后,我认为这与我的数据集中的命名有关。
这是因为对于我的数据,比如这篇文章中的数据,命名约定不是很友好。虽然我们可以在 中添加“反引号” (``)
,但在使用基于 R 的函数names
进行编程时,有时很难使用它们。base
那么解决方案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)
注意:我无法提供可重现的示例,因为我无法轻松创建示例数据集。但是,我确实按照此答案中的说明解决了此问题。
推荐阅读
- arduino - 面包板和编码后对 Teensy 没有回应
- paypal - 如何将 PayPal 与 MERN 堆栈集成
- javascript - 存储和访问每个单选按钮单击
- github - 在 github 中移动文件夹/文件会导致问题吗?
- kotlin - Kotlin Flow,使流程有条件 - 仅在 true 时进行调用
- c# - 画布子属性绑定
- c# - 为什么未指定动作名称时不调用索引方法
- user-interface - 这张图片中的两个 H2O.ai 有什么区别。以及为什么在某些文本字段中输入文本时自动加粗
- java - 如何使用递归打印三角形?
- ios - 根据标签大小自定义 UICollectionView 单元格大小