R-选择最后两列



我下面有一个数据帧,实际上它有更多的列,我只想选择最后两列。

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)

您可以将selecttail一起使用以获得最后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

最新更新