select 在 R 中使用 dplyr 不以字符串开头的列
select columns that do NOT start with a string using dplyr in R
我想要 select 我的 tibble 中以字母 R 结尾且不以字符串 ("hc") 开头的列。例如,如果我有一个如下所示的数据框:
name hc_1 hc_2 hc_3r hc_4r lw_1r lw_2 lw_3r lw_4
Joe 1 2 3 2 1 5 2 2
Barb 5 4 3 3 2 3 3 1
为了做我想做的事,我尝试了很多选择,但令我惊讶的是这个不起作用:
library(tidyverse)
data %>%
select(ends_with("r"), !starts_with("hc"))
当我尝试时,我得到这个错误:
Error: !starts_with("hc")
must evaluate to column positions or names, not a logical vector
我也试过使用 negate() 并得到同样的错误。
library(tidyverse)
data %>%
select(ends_with("r"), negate(starts_with("hc")))
Error: negate(starts_with("hc"))
must evaluate to column positions or names, not a function
我想将答案保留在 dplyr select 函数中,因为一旦我 select 变量,我将最终使用 mutate_at 反转它们, 所以一个整洁的解决方案是最好的。
谢谢!
如果您需要高级正则表达式,请使用 matches
library(dplyr)
#Starts with any letter except h or c and ends with an r
df %>% select(matches('^[^hc].*r$'))
lw_1r lw_3r
1 1 2
2 2 3
我们可以使用 -
因为 starts_with
输出不是逻辑向量
library(dplyr)
data %>%
select(ends_with("r"), -starts_with("hc"))
# lw_1r lw_3r
#1 1 2
#2 2 3
数据
data <- structure(list(name = c("Joe", "Barb"), hc_1 = c(1L, 5L), hc_2 = c(2L,
4L), hc_3r = c(3L, 3L), hc_4r = 2:3, lw_1r = 1:2, lw_2 = c(5L,
3L), lw_3r = 2:3, lw_4 = 2:1), class = "data.frame", row.names = c(NA,
-2L))
我想要 select 我的 tibble 中以字母 R 结尾且不以字符串 ("hc") 开头的列。例如,如果我有一个如下所示的数据框:
name hc_1 hc_2 hc_3r hc_4r lw_1r lw_2 lw_3r lw_4
Joe 1 2 3 2 1 5 2 2
Barb 5 4 3 3 2 3 3 1
为了做我想做的事,我尝试了很多选择,但令我惊讶的是这个不起作用:
library(tidyverse)
data %>%
select(ends_with("r"), !starts_with("hc"))
当我尝试时,我得到这个错误:
Error:
!starts_with("hc")
must evaluate to column positions or names, not a logical vector
我也试过使用 negate() 并得到同样的错误。
library(tidyverse)
data %>%
select(ends_with("r"), negate(starts_with("hc")))
Error:
negate(starts_with("hc"))
must evaluate to column positions or names, not a function
我想将答案保留在 dplyr select 函数中,因为一旦我 select 变量,我将最终使用 mutate_at 反转它们, 所以一个整洁的解决方案是最好的。
谢谢!
如果您需要高级正则表达式,请使用 matches
library(dplyr)
#Starts with any letter except h or c and ends with an r
df %>% select(matches('^[^hc].*r$'))
lw_1r lw_3r
1 1 2
2 2 3
我们可以使用 -
因为 starts_with
输出不是逻辑向量
library(dplyr)
data %>%
select(ends_with("r"), -starts_with("hc"))
# lw_1r lw_3r
#1 1 2
#2 2 3
数据
data <- structure(list(name = c("Joe", "Barb"), hc_1 = c(1L, 5L), hc_2 = c(2L,
4L), hc_3r = c(3L, 3L), hc_4r = 2:3, lw_1r = 1:2, lw_2 = c(5L,
3L), lw_3r = 2:3, lw_4 = 2:1), class = "data.frame", row.names = c(NA,
-2L))