我想删除指定列之前的所有列。
样本数据:
在mpg
中,这些是按顺序排列的下列列名称:
names(mpg)
[1] "manufacturer", "model", "displ", "year", "cyl", "trans", "drv", "cty",
[9] "hwy", "fl", "class"
说我想删除“ cyl
”列之前的所有列,我会这样做:
mpg[-(1:4)]
但是在我的实际数据中,有时指定列(即cyl
)之前的列数发生了变化。因此,有时总是有3列或7列,而不是总是在所需列(manufacturer, model, displ, year
之前的4列(cyl
)。
如何调整此代码,以确保包括“ cyl
”之后的所有列?
答案 0 :(得分:8)
您可以使用which
来获取正确的索引和子集。您需要减去1,因为您不想删除cyl
列。
如果您已经在使用tidyverse
工具(由于您使用的是ggplot2
中的示例数据集,这似乎很有可能),那么您也可以使用dplyr::select()
和tidyselect::last_col()
如下。语法是,您可以使用colnamea:colnameb
来引用列选择,列选择将是colnamea
到colnameb
之间的所有列。 last_col
是对数据框中最后一列的引用,因为我们无法自动知道此处的内容。
remove_up_to <- function(df, colname){
col_i <- which(colnames(df) == colname) - 1
df[-(1:col_i)]
}
library(tidyverse)
remove_up_to(mpg, "cyl")
#> # A tibble: 234 x 7
#> cyl trans drv cty hwy fl class
#> <int> <chr> <chr> <int> <int> <chr> <chr>
#> 1 4 auto(l5) f 18 29 p compact
#> 2 4 manual(m5) f 21 29 p compact
#> 3 4 manual(m6) f 20 31 p compact
#> 4 4 auto(av) f 21 30 p compact
#> 5 6 auto(l5) f 16 26 p compact
#> 6 6 manual(m5) f 18 26 p compact
#> 7 6 auto(av) f 18 27 p compact
#> 8 4 manual(m5) 4 18 26 p compact
#> 9 4 auto(l5) 4 16 25 p compact
#> 10 4 manual(m6) 4 20 28 p compact
#> # ... with 224 more rows
mpg %>% select(cyl:tidyselect::last_col())
#> # A tibble: 234 x 7
#> cyl trans drv cty hwy fl class
#> <int> <chr> <chr> <int> <int> <chr> <chr>
#> 1 4 auto(l5) f 18 29 p compact
#> 2 4 manual(m5) f 21 29 p compact
#> 3 4 manual(m6) f 20 31 p compact
#> 4 4 auto(av) f 21 30 p compact
#> 5 6 auto(l5) f 16 26 p compact
#> 6 6 manual(m5) f 18 26 p compact
#> 7 6 auto(av) f 18 27 p compact
#> 8 4 manual(m5) 4 18 26 p compact
#> 9 4 auto(l5) 4 16 25 p compact
#> 10 4 manual(m6) 4 20 28 p compact
#> # ... with 224 more rows
由reprex package(v0.2.0)于2018-08-07创建。
答案 1 :(得分:3)
其他方法可能更快,更清晰。这是一个晦涩的方法:
For i = 1 To olItems.Count
Set olItem = olItems(i)
If TypeOf olItem Is Outlook.MailItem Then
Set olMail = olItem ' essentially a type cast from Object to MailItem
...
End If
Next