grep()来搜索数据帧的列名

时间:2014-07-03 19:31:34

标签: r

是否有更清晰,更简单,更直接,更短的方式来执行此操作:

其中df1是数据帧:

names(df1[grep("Yield",names(df1))])

我想返回包含单词yield。

的任何列名

谢谢,

2 个答案:

答案 0 :(得分:27)

grep有一个value参数应该适用于此。尝试:

grep("Yield", names(df1), value = TRUE)

MRE

df1 <- data.frame(
  Yield_1995 = 1:5,
  Yield_1996 = 6:10,
  Something = letters[1:5]
)

## Your current approach
names(df1[grep("Yield",names(df1))])
# [1] "Yield_1995" "Yield_1996"

## My suggestion
grep("Yield", names(df1), value=TRUE)
# [1] "Yield_1995" "Yield_1996"

好的,所以它在简洁性方面并不胜利,但它在意图的清晰度方面确实如此: - )


为了多样化......一种“dplyr”的方法。

library(dplyr)
names(df1 %>% select(contains("Yield")))
# [1] "Yield_1995" "Yield_1996"
names(select(df1, contains("Yield")))
# [1] "Yield_1995" "Yield_1996"

答案 1 :(得分:0)

您可以轻松定义自己的功能,使其更短。例如,

 myfun <- function(x,y) names(y[grep(x, names(y))])

然后,无论何时需要,都可以使用

 myfun("Yield", df1)

它几乎不会变短。