R-选择最后两列

R-选择最后两列,r,select,R,Select,我在下面有一个数据框,实际上它有更多的列,我只想选择最后两列 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-0

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

   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)
没有dplyr:

df.minus.2.columns <- df[,c(-1,-2)]

df.minus.2.columns您可以使用
select
with
tail
获取最后两个列名

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

我们可以使用
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

晚会迟到了。仅针对记录,在
tidyverse
中有一种方便的方法来选择最后一列:


图书馆(tidyverse)
df%>%
选择(最后一列(偏移量=1),最后一列()
日期2日期3
1 2016-12-01 2016-12-01
2 2018-10-01 2016-12-01
3        2016-12-01
4        2016-12-01
由(v0.3.0)于2021年1月20日创建

直接选择第一列:

>df%>%
+选择(1,2)
日期1日期2
1        2016-12-01
2 2017-01-01 2018-10-01
3 2016-12-01       
4.

不错。这个概念在没有dplyr的情况下也能工作:
df[,tail(names(df),2)]
@EdwardCarney是的,你是对的。我在回答中也包括了这一点。这就是性能,你如何选择第一列和最后一列?@Sklenicka你的意思是
df%>%select(1,tail(names(.),2))
?负索引意味着删除列。这个答案删除了第一列和第二列,只剩下第三列(作为列表返回)。或者稍微修改第一个建议:
df[-(1:(ncol(df)-n))]
,其中使用
n
可以指定从末尾开始需要多少列。在示例数据帧的情况下,它将是
df[-(1:(ncol(df)-2))]
df[tail(names(df), 2)]
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
library(tidyverse)
df %>%
    select_at((ncol(.)-1) : ncol(.))