我下面有一个数据框,实际上它实际上有更多的列,我只想选择最后两列。
df <- read.table(text="
date1 date2 date3
1 NA 2016-12-01 2016-12-01
2 2017-01-01 2018-10-01 2016-12-01
3 2016-12-01 NA 2016-12-01
4 NA NA 2016-12-01
", header=TRUE)
如何在不指定列名的情况下做到这一点?
df %>%
select(date2, date3)
您可以使用
select
和 tail
来获取最后 2 列名称
library(dplyr)
df %>% select(tail(names(.), 2))
# date2 date3
#1 2016-12-01 2016-12-01
#2 2018-10-01 2016-12-01
#3 <NA> 2016-12-01
#4 <NA> 2016-12-01
R 基数是
df[tail(names(df), 2)]
聚会迟到了。仅作为记录,
tidyverse
中有一种方便的方法来选择最后一列:
library(tidyverse)
df %>%
select(last_col(offset = 1), last_col())
date2 date3
1 2016-12-01 2016-12-01
2 2018-10-01 2016-12-01
3 <NA> 2016-12-01
4 <NA> 2016-12-01
由 reprex 包于 2021 年 1 月 20 日创建(v0.3.0)
选择第一列非常简单:
> df %>%
+ select(1,2)
date1 date2
1 <NA> 2016-12-01
2 2017-01-01 2018-10-01
3 2016-12-01 <NA>
4 <NA> <NA>
我们可以利用
ncol
df[(ncol(df)-1):ncol(df)]
# date2 date3
#1 2016-12-01 2016-12-01
#2 2018-10-01 2016-12-01
#3 <NA> 2016-12-01
#4 <NA> 2016-12-01
或使用
select_at
library(tidyverse)
df %>%
select_at((ncol(.)-1) : ncol(.))
没有 dplyr:
df.minus.2.columns <- df[,c(-1,-2)]
抱歉,不知道如何使用 dplyr 来做到这一点。
使用 dplyr 并使用矢量化操作,您可以选择最后的
n
观测值:
n <- 2
library(tidyverse)
df %>% tail()
df %>% select(last_col()-(n-1):0) %>% tail()
date2 date3
1 2016-12-01 2016-12-01
2 2018-10-01 2016-12-01
3 <NA> 2016-12-01
4 <NA> 2016-12-01
另一种变化:
library(tidyverse)
diamonds |>
select(9:last_col())
#> # A tibble: 53,940 × 2
#> y z
#> <dbl> <dbl>
#> 1 3.98 2.43
#> 2 3.84 2.31
#> 3 4.07 2.31
#> 4 4.23 2.63
#> 5 4.35 2.75
#> 6 3.96 2.48
#> 7 3.98 2.47
#> 8 4.11 2.53
#> 9 3.78 2.49
#> 10 4.05 2.39
#> # ℹ 53,930 more rows
创建于 2024-05-02,使用 reprex v2.0.2