R:数据框中的子集行

R:数据框中的子集行,r,shiny,subset,R,Shiny,Subset,我试图通过使用Shiny中的select input小部件,按某些因子级别或这些级别的组运行模型 当我按一个因子水平子集时,我得到了正确的模型结果。但当我试图运行一个包含所有因素水平或水平组的模型时,我并没有得到正确的模型估计 例如,当包括所有因素水平时,即模型在整个数据帧上运行时,正确的模型估计值为: 但当我运行我的应用程序并选择代表不同地理区域的因子变量的所有级别时,我会得到不同的结果: 我的问题是,我如何指定我的反应子设置功能,以适应所有因素水平或水平组 单个模型的代码,包括所有级别和

我试图通过使用Shiny中的select input小部件,按某些因子级别或这些级别的组运行模型

当我按一个因子水平子集时,我得到了正确的模型结果。但当我试图运行一个包含所有因素水平或水平组的模型时,我并没有得到正确的模型估计

例如,当包括所有因素水平时,即模型在整个数据帧上运行时,正确的模型估计值为:

但当我运行我的应用程序并选择代表不同地理区域的因子变量的所有级别时,我会得到不同的结果:

我的问题是,我如何指定我的反应子设置功能,以适应所有因素水平或水平组

单个模型的代码,包括所有级别和按因子级别划分的模型,以供参考:

闪亮代码:


问题在于在子集中使用==

让我们看看您的数据:

table(Heating$region)

#> valley scostl mountn ncostl 
#>    177    361    102    260 
900行,scostl和ncostl占您行中的621行。然而,当我输入匹配向量时,只返回305

nrow(subset(Heating, region == c("ncostl","scostl")))
#> [1] 305
发生了什么事?为什么不是621?向量回收在这里咬你。因为加热$region和CNSTL的成本很高,所以scostl的长度不同,所以会重复较短的一个,直到它们的长度相同为止。实际上,您正在对ncostl、scostl的模式进行过滤,并返回这些匹配项

相反,您希望使用%in%运算符

nrow(subset(Heating, region %in% c("ncostl","scostl")))
#> [1] 621
现在,没有向量循环,因为加热$region的每个元素都会在您提供的列表中进行成员检查


您得到矢量的原因是它是在shiny中的multiple selectInput的输出。

非常感谢您。%在工作中。在阅读了你的答案后,我仍然有点不解,因为为什么我选择应用程序中的所有区域或在应用程序外部的整个数据帧上运行模型时会得到相同的模型结果。只需使用%in%运算符,我就不必在选择输入中显式创建级别分组,例如cncostl、scostl。当您过滤数据时,%in%运算符避免了向量循环问题,即获取错误的数据子集。对我来说,这一变化产生了正确的结果。
nrow(subset(Heating, region == c("ncostl","scostl")))
#> [1] 305
nrow(subset(Heating, region %in% c("ncostl","scostl")))
#> [1] 621