是否有更清晰,更简单,更直接,更短的方式来执行此操作:
其中df1是数据帧:
names(df1[grep("Yield",names(df1))])
我想返回包含单词yield。
的任何列名谢谢,
答案 0 :(得分:27)
grep
有一个value
参数应该适用于此。尝试:
grep("Yield", names(df1), value = TRUE)
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)
它几乎不会变短。