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
withtail
获取最后两个列名
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(.))