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

Creating data subset with a vector - why does data have to be sorted?

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

我有一个名为 '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)

向量似乎有效,但子集步骤无效。同样,如果我对数据进行排序,那么它就可以正常工作。

通读之前的问题,听起来使用 [] 比 'subset' 更好。我试过了,但没有解决问题。

我想我发现了几个问题。在 grep 中,您不想将值设置为 TRUE。将值设置为 true returns 匹配的词而不是行的索引。您还缺少一个逗号(因此出现未定义的列错误)。

试试这个: LakeK_all[grep("^S", LakeK_all$湖), ]