R子集返回带有警告的有限集

时间:2015-08-15 02:53:55

标签: r subset

我有一个12500 obs的data.frame。 8个变量,其中一个是State(tax $ State)。我希望将数据子集化为我从Shiny中的用户输入获得的多个状态,但是当我添加多个状态时,我不断获取数据。我已经找到了时髦的子集函数。只有两个状态我没有得到警告,但是第三个抛出异常。在每种情况下,我限制在250个障碍物。在返回。例如

temp<-subset(taxes, State==c("AL","MO",TX))

警告信息:1:在is.na(e1)|中is.na(e2):   较长的物体长度不是较短物体长度的倍数 2:在==.default(州,c(&#34; AL&#34;,&#34; MO&#34;,&#34; TX&#34;)):   较长的物体长度不是较短物体长度的倍数

我已尝试使用相同结果的其他变量

temp<-subset(taxes,StateFullName==c("Iowa","Missouri","Texas"))

警告讯息: 在StateFullName == c(&#34; Iowa&#34;,&#34; Missouri&#34;,&#34; Texas&#34;):   较长的物体长度不是较短物体长度的倍数

关于为什么我限制在250只障碍物的任何想法?

2 个答案:

答案 0 :(得分:3)

您只需要%in%来比较vector的{​​{1}}&gt; 1即。

length

或者使用subset(taxes, State %in% c('AL', 'MO', 'TX')) # State amount #4 MO 14143 #27 TX 11517 #30 AL 14465 ,我们会转换&#39; data.frame&#39;到&#39; data.table&#39; (data.table),将setDT(taxes列设置为&#39;州&#39;并提取具有&#39; MO&#39;,&#39; TX&#39;&#39; AL&#39;在&#39;州&#39;。

key

要了解您的代码无效的原因,请检查逻辑向量输出。

library(data.table)
setDT(taxes, key='State')[c('MO', 'TX', 'AL')]
#    State amount
#1:    MO  14143
#2:    TX  11517
#3:    AL  14465
  

警告信息:1:在is.na(e1)|中is.na(e2):较长的物体长度   不是较短对象长度的倍数

此示例中没有任何元素为with(taxes, State==c('AL', 'MO', 'TX')) # [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # [49] FALSE FALSE 。它的比较方式是基于回收。 “状态”的前三个元素是&#39;与向量&#39; AL&#39;,&#39; MO&#39;和&#39; TX&#39;进行比较。按顺序

TRUE

在这里,我们比较两个向量的相应值之间的元素和

 taxes$State[1:3] == c('AL', 'MO', 'TX')
 #[1] FALSE FALSE FALSE

与&#39; AL&#39;,&#39; MO&#39;和&#39; TX&#39;不匹配在相应的位置,它返回&#39; FALSE&#39;。

同样地,它与 taxes$State[1:3] #[1] AK AL AR 的状态&#39;进行比较。列,即下一个比较是

length

此处所有 taxes$State[4:6] == c('AL', 'MO', 'TX') #[1] FALSE FALSE FALSE 都是相应的“状态”。元素包括&#39; AZ&#39; CA&#39;&#39; CO&#39;。我们最后会收到警告,因为

FALSE

nrow(taxes) #[1] 50

如果数据集的50%%3!=0nrow,则警告不会出现,但仍然根据位置进行比较,我们可能无法按预期结果。

数据

51

答案 1 :(得分:0)

是的。所以我不知道或理解的是因为我从未使用过子集的向量是该子集将c(a,b,c)看作序列而不是单个匹配的列表。谢谢大家的帮助!