我有一个包含以下列的数据框: -
sample.data
a_b_c d_b_e r_f_g c_b_a
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
如何仅选择包含列名称中的“a”和“c”的列?
答案 0 :(得分:1)
尝试df %>% dplyr::select(matches("(a|c)"))
library(dplyr)
df <- data.frame(
a_b_c=1:4,
d_b_e=1:4,
r_f_g=1:4,
c_b_a=1:4
)
结果
> df %>% dplyr::select(matches("(a|c)"))
a_b_c c_b_a
1 1 1
2 2 2
3 3 3
4 4 4
答案 1 :(得分:1)
要选择包含a
和c
的变量,我们可以这样做:
library(dplyr)
df %>%
select(matches("(a.*c)|(c.*a)"))
a_b_c c_b_a 1 1 1 2 2 2 3 3 3 4 4 4
请注意,未选择var a_a_e
,因为它不包含c
,并且未选择var c_f_g
,因为它不包含a
。如var a
所示,将不会选择包含两个c
和两个a_a_e
的列名。
我们也可以使用str_subset
:
library(dplyr)
library(stringr)
df %>%
select(str_subset(names(df), "(a.*c)|(c.*a)"))
数据:
df <- data.frame(
a_b_c = 1:4,
a_a_e = 1:4,
c_f_g = 1:4,
c_b_a = 1:4
)
答案 2 :(得分:0)
希望这就是你要找的东西:
a_b_c <- c(1,2,3,4)
d_b_e <- c(1,2,3,4)
yy <- cbind(a_b_c, d_b_e)
> yy
a_b_c d_b_e
[1,] 1 1
[2,] 2 2
[3,] 3 3
[4,] 4 4
yy <- as.data.frame(yy)
yy
a_b_c d_b_e
1 1 1
2 2 2
3 3 3
4 4 4
y <- yy[which(names(yy) %in% "a_b_c")]
> y
a_b_c
1 1
2 2
3 3
4 4
在您的示例中,您可以使用:
y <- sample.data[which(names(sample.data) %in% c("a_b_c","c_b_a" )]
答案 3 :(得分:0)
如果您想了解它的工作原理,请使用以下功能:
contain_both <- function(data_frame, letter_a, letter_b) {
j <- 0
keep_columns <- NULL
for(i in 1:ncol(data_frame)) {
has_letters <- unlist(strsplit(names(data_frame)[i], '_'))
if(is.element(letter_a, has_letters) && is.element(letter_b, has_letters)) {
j <- j + 1
keep_columns[j] <- i
}
}
return(data_frame[, keep_columns])
}
数据强>:
df <- data.frame(seq(1:4), seq(1:4), seq(1:4), seq(1:4))
names(df) <- c('a_b_c', 'd_b_e', 'r_f_g', 'c_b_a')
只需传递数据框,以及 2个字母选项:
<强>用法强>:
contain_both(df, 'b', 'c')