我正在使用匹配运算符从单独的数据框中获取矩阵中出现的值.但是,生成的矩阵的值按照它们出现在数据帧中的顺序而不是原始矩阵中的值.有没有办法使用匹配运算符保留原始矩阵的顺序?
这是一个简单的例子:
vec=c("b","a","c"); vec
df=data.frame(row.names=letters[1:5],values=1:5); df
df[rownames(df) %in% vec,1]
Run Code Online (Sandbox Code Playgroud)
这会产生数据框中出现> [1] 1 2 3的顺序"a" "b" "c".但是,我想生成>[1] 2 1 3哪个是它们出现在原始向量中的顺序.
谢谢!
使用match.
df[match(vec, rownames(df)), ]
# [1] 2 1 3
Run Code Online (Sandbox Code Playgroud)
要知道,如果你有在任何重复的值vec或者rownames(df),match可能不会如预期的行为.
编辑: 我刚刚意识到行名称索引将更简单,更优雅地解决您的问题:
df[vec, ]
# [1] 2 1 3
Run Code Online (Sandbox Code Playgroud)