使用向量创建数据子集 - 为什么必须对数据进行排序?
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$湖), ]
我希望有人可以帮助解决我在创建数据子集时遇到的以下问题:
我有一个名为 '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$湖), ]