假设我有一个data.frame:
x.a <- c(1,2,3,4,5)
y.b <- c(2,3,4,5,6)
y.c <- c(5,1,0,9,2)
y.d <- c(5,6,7,3,1)
x.e <- c(2,6,1,2,3)
df <- data.frame(x.a,y.b,y.c,y.d,x.e)
假设我想对变量y.b,y.c,y.d进行排名:
df[2:4] <- sapply(df[2:4], function(x) rank(x))
有没有办法将函数应用于前缀为y.
的所有变量? E.g:
df[y.*] <- sapply(df[y.*], function(x) rank(x))
答案 0 :(得分:5)
使用grep
和正则表达式,如下所示:
df <- data.frame(x.a,y.b,y.c,y.d,x.e)
df[, grep("y\\..", names(df))]
y.b y.c y.d
1 2 5 5
2 3 1 6
3 4 0 7
4 5 9 3
5 6 2 1
您必须在变量名称中转义.
,第二个.
用于匹配所有内容。