在不指定所有对象的情况下对 R 中的多个对象进行子集化

Subseting multiple object in R without specifying all of them

让我们假设我们以某种方式结束了数据框对象(在下面的示例中为 T2),并且我们希望使用该数据框对原始数据进行子集化。有没有办法在 subset 对象中不使用 |

这是我玩过但失败的数据集

education = read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/robustbase/education.csv", stringsAsFactors = FALSE)
colnames(education) = c("X", "State", "Region", "Urban.Population", "Per.Capita.Income", "Minor.Population", "Education.Expenditures")

head(education)

T1 = c(1,4,13,15,17,23,33,38)

T2 = education[T1,]$State
subset(education, State=="ME"| State=="MA" | State=="MI" | State=="MN" | State=="MO" | State=="MD" | State=="MS" | State=="MT")

subset(education, State==T2[3])

subset(education, State==T2)

PS:我创建了 T2 作为以 M 开头的状态,但我不想使用字符串或任何东西。假设我们以某种方式以 T2 结束,其中输出是一些状态。

我不太确定什么是可以接受的答案,但 subset(education, State %in% T2) 按原样使用 T2 而没有使用 |。这能解决您的问题吗?这几乎与 Jon Spring 在评论中指出的方法相同,但我们可以使用 T2%in% 而不是指定向量。你说 T2 是一个 data.frame 对象,但在你提供的数据中它变成了一个字符向量。

education = read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/robustbase/education.csv", stringsAsFactors = FALSE)
colnames(education) = c("X", "State", "Region", "Urban.Population", "Per.Capita.Income", "Minor.Population", "Education.Expenditures")

T1 = c(1,4,13,15,17,23,33,38)
T2 = education[T1,]$State

T2 # T2 is not a data.frame object (R 4.0)
#> [1] "ME" "MA" "MI" "MN" "MO" "MD" "MS" "MT"

subset(education, State %in% T2)

#>     X State Region Urban.Population Per.Capita.Income Minor.Population
#> 1   1    ME      1              508              3944              325
#> 4   4    MA      1              846              5233              305
#> 13 13    MI      2              738              5439              337
#> 15 15    MN      2              664              4921              330
#> 17 17    MO      2              701              4672              309
#> 23 23    MD      3              766              5331              323
#> 33 33    MS      3              445              3448              358
#> 38 38    MT      4              534              4418              335
#>    Education.Expenditures
#> 1                     235
#> 4                     261
#> 13                    379
#> 15                    378
#> 17                    231
#> 23                    330
#> 33                    215
#> 38                    302

但是假设 T2 将是一个实际的 data.frame:

T2 = education[T1,]["State"]

T2 #check
#>    State
#> 1     ME
#> 4     MA
#> 13    MI
#> 15    MN
#> 17    MO
#> 23    MD
#> 33    MS
#> 38    MT

然后我们可以通过用 drop = TRUE.

子集将其强制转换为向量
subset(education, State %in% T2[, , drop = TRUE])

#>     X State Region Urban.Population Per.Capita.Income Minor.Population
#> 1   1    ME      1              508              3944              325
#> 4   4    MA      1              846              5233              305
#> 13 13    MI      2              738              5439              337
#> 15 15    MN      2              664              4921              330
#> 17 17    MO      2              701              4672              309
#> 23 23    MD      3              766              5331              323
#> 33 33    MS      3              445              3448              358
#> 38 38    MT      4              534              4418              335
#>    Education.Expenditures
#> 1                     235
#> 4                     261
#> 13                    379
#> 15                    378
#> 17                    231
#> 23                    330
#> 33                    215
#> 38                    302

reprex package (v0.3.0)

于 2021 年 6 月 12 日创建