两个例子对我很有用。
我如何选择: 1)名称以b或B开头的变量(即不区分大小写) 要么 2)名称包含3
的变量df <- data.frame(a1 = factor(c("Hi", "Med", "Hi", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
a2 = c("A", "D", "A", "C"), a3 = c(8, 3, 9, 9),
b1 = c(1, 1, 1, 2), b2 = c( 5, 4, 3,2), b3 = c(3, 4, 3, 4),
B1 = c(3, 6, 4, 4))
答案 0 :(得分:31)
如果您只想要变量名称:
grep("^[Bb]", names(df), value=TRUE)
grep("3", names(df), value=TRUE)
如果您想要选择这些列,那么
df[,grep("^[Bb]", names(df), value=TRUE)]
df[,grep("^[Bb]", names(df))]
第一个使用按名称选择,第二个使用按一组列号选择。
答案 1 :(得分:3)
虽然我喜欢上面的答案,但我也想提供一个“ tidyverse”解决方案。如果您像我经常做的那样做大量的管道并尝试一次做几件事,那么您可能会喜欢这个答案。另外,我发现此代码更具“人性化”可读性。
dplyr函数select_vars
将根据第一个参数中的字符向量选择变量,该变量应包含诸如starts_with
或{{1 }}
matches
请注意,library(dplyr)
df <- data.frame(a1 = factor(c("Hi", "Med", "Hi", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
a2 = c("A", "D", "A", "C"), a3 = c(8, 3, 9, 9),
b1 = c(1, 1, 1, 2), b2 = c( 5, 4, 3,2), b3 = c(3, 4, 3, 4),
B1 = c(3, 6, 4, 4))
#will select the names starting with a "b" or a "B"
select_vars(names(df), starts_with('b', ignore.case = TRUE))
#use select in conjunction with the previous code
df %>%
select(select_vars(names(df), starts_with('b', ignore.case = TRUE)))
#Alternatively
select_vars(names(df), matches('^[Bb]'))
的默认值为ignore.case
,但我将其默认显示在此处,以防将来的读者好奇如何调整代码。也可以使用TRUE
和include
参数。例如,如果您想要以“ B”或“ b”开头的所有内容,并且还希望包含“ a1”,则可以使用exclude
。
答案 2 :(得分:0)
我认为值得补充的是,select_vars
版tidyverse
起已退役。现在,1.2.1
可能是您在“ tidyverse”中寻找的东西。请参阅文档here。