提取值包含特定字符串的变量名称 (R)
Extract Variable Names whose Values contain a specific string (R)
我想提取一个向量,其中包含所有变量的名称,这些变量的值(不是名称本身)包含特定字符串。
例如:
> dat
Name Mark1 Mark2 Mark3
1 A 67% 61% 87
2 B 98% 83% 26
3 C 42% 62% 98
4 D 83% 32% 36
5 E 40% 90% 80
6 F 89% 25% 44
从上面的数据框中,我想要其值包含“%”符号的变量名称。截至目前,我一直在使用 for 循环来执行此操作,但完成一项简单任务似乎还有很长的路要走。
> prct <- c()
> for (i in 1:ncol(dat)){
if (any(grepl("%", dat[,i]) == T)){
prct <- c(prct, colnames(dat)[i])
}
}
> prct
[1] "Mark1" "Mark2"
如果 Mark1
和 Mark2
中的每个值都包含 %
我们只能检查第一行:
colnames(df)[grepl('%', df[1,])]
[1] "Mark1" "Mark2"
否则,您可以使用 apply
和 MARGIN = 2
将此函数应用于每一列和 return 命名逻辑向量:
apply(df, 2, function(x) any(grepl('%', x)))
Name Mark1 Mark2 Mark3
FALSE TRUE TRUE FALSE
如果您只想要变量名,请使用此逻辑向量对 colnames(df)
:
进行子集化
colnames(df)[apply(df, 2, function(x) any(grepl('%', x)))]
[1] "Mark1" "Mark2"
使用 tidyverse:
df<-read.table(text=
" Name Mark1 Mark2 Mark3
1 A 67% 61% 87
2 B 98% 83% 26
3 C 42% 62% 98
4 D 83% 32% 36
5 E 40% 90% 80
6 F 89% 25% 44",h=TRUE)
f <- function(x) any(str_detect(x,"%"))
df %>% select_if(f) %>% colnames
#[1] "Mark1" "Mark2"
或者:
df %>% select_if(funs(any(str_detect(.,"%")))) %>% colnames
我想提取一个向量,其中包含所有变量的名称,这些变量的值(不是名称本身)包含特定字符串。
例如:
> dat
Name Mark1 Mark2 Mark3
1 A 67% 61% 87
2 B 98% 83% 26
3 C 42% 62% 98
4 D 83% 32% 36
5 E 40% 90% 80
6 F 89% 25% 44
从上面的数据框中,我想要其值包含“%”符号的变量名称。截至目前,我一直在使用 for 循环来执行此操作,但完成一项简单任务似乎还有很长的路要走。
> prct <- c()
> for (i in 1:ncol(dat)){
if (any(grepl("%", dat[,i]) == T)){
prct <- c(prct, colnames(dat)[i])
}
}
> prct
[1] "Mark1" "Mark2"
如果 Mark1
和 Mark2
中的每个值都包含 %
我们只能检查第一行:
colnames(df)[grepl('%', df[1,])]
[1] "Mark1" "Mark2"
否则,您可以使用 apply
和 MARGIN = 2
将此函数应用于每一列和 return 命名逻辑向量:
apply(df, 2, function(x) any(grepl('%', x)))
Name Mark1 Mark2 Mark3
FALSE TRUE TRUE FALSE
如果您只想要变量名,请使用此逻辑向量对 colnames(df)
:
colnames(df)[apply(df, 2, function(x) any(grepl('%', x)))]
[1] "Mark1" "Mark2"
使用 tidyverse:
df<-read.table(text=
" Name Mark1 Mark2 Mark3
1 A 67% 61% 87
2 B 98% 83% 26
3 C 42% 62% 98
4 D 83% 32% 36
5 E 40% 90% 80
6 F 89% 25% 44",h=TRUE)
f <- function(x) any(str_detect(x,"%"))
df %>% select_if(f) %>% colnames
#[1] "Mark1" "Mark2"
或者:
df %>% select_if(funs(any(str_detect(.,"%")))) %>% colnames