派对迟到了。就记录而言,在
我下面有一个数据帧,实际上它有更多的列,我只想选择最后两列。
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-01-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