使用向量创建数据子集 - 为什么必须对数据进行排序?

时间:2015-02-03 23:17:06

标签: r subset

我希望有人可以帮助解决我在创建数据子集时遇到的以下问题:

我有一个名为' LakeK_all'的数据集。其中一个专栏名为“Lake'并包含一个湖名称列表(S001-Out,S002-Out,Y001-Out,Y002-Out,...)。我想提取以' S开头的数据子集。我发现如果我的数据按字母顺序排序,以便所有网站都以' S'是第一个,从Y开始的是最后一个。如果湖泊混淆不起作用。我可以先对数据进行排序,但如果可能的话,我想直接解决问题并保持步骤简单。

这是我的代码:

seki_vector = LakeK_all[grep("^[S].*", LakeK_all$Lake, value=TRUE)]
seki_vector

LakeK = subset(LakeK_all, subset=(LakeK_all$Lake==seki_vector))
LakeK

以下是我得到的输出:

> seki_vector = LakeK_all[grep("^S", LakeK_all$Lake, value=TRUE)]

Error in `[.data.frame`(LakeK_all, grep("^S", LakeK_all$Lake, value = TRUE)) : 
  undefined columns selected

> seki_vector
 [1] "S005-Out" "S003-Out" "S004-Out" "S001-Out" "S040-Out" "S043-Out" "S044-Out" "S048-Out" "S049-Out" "S041-Out" "S047-Out" "S042-Out" "S046-Out" "S039-Out"

LakeK = subset(LakeK_all, subset=(LakeK_all$Lake==seki_vector))

Warning messages:
1: In is.na(e1) | is.na(e2) :
  longer object length is not a multiple of shorter object length
2: In `==.default`(LakeK_all$Lake, seki_vector) :
  longer object length is not a multiple of shorter object length
> LakeK
 [1] Y           Year        WYear       Lake        Panel       Lat         Long        Cen         LowerDL     UpperDL     InclProb    PanelProb   AdjInclProb
<0 rows> (or 0-length row.names)

似乎向量正在工作,但不是子集步骤。再次,如果我对数据进行排序,那么它的工作正常。

通过以前的问题阅读,听起来最好使用[]代替&#39;子集&#39;。我尝试过这个并没有解决问题。

1 个答案:

答案 0 :(得分:0)

我想我发现了一些问题。在grep中,您不希望将值设置为TRUE。将值设置为true将返回匹配的单词而不是行的索引。你也错过了一个逗号(因此未完成的列错误)。

试试这个: LakeK_all [grep(&#34; ^ S&#34;,LakeK_all $ Lake),]