根据特定顺序的列值选择行

时间:2014-05-30 14:05:11

标签: r

我有一个数据框,例如:

df <- data.frame(ID=c(8, 2, 5, 1, 4), value=c("a", "b", "c", "d", "e"))

  ID value
1  8     a
2  2     b
3  5     c
4  1     d
5  4     e

我知道如何在“ID”列中选择具有给定值的行。但是如何以指定顺序获取行的“ID”值?

示例:如何按给定顺序提取ID为4,2和5的行的“值”?我想得到的结果是“e”,“b”,“c”。

使用%in%会以错误的顺序显示结果:

df[df$ID %in% c(4, 2, 5), "value"]

[1] b c e
Levels: a b c d e

我找到了使用rownames的解决方法,但我觉得必须有更好的解决方案。

# workaround
rownames(df) <- df$ID
df[as.character(c(4, 2, 5)), "value"]

[1] e b c
Levels: a b c d e

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以通过新引入的排名列使用mergeorder

dat = merge(df,data.frame(ID=c(4,2,5),v=1:3))
dat[order(dat$v),"value"]
[1] e b c

或一个线性选项:

with(merge(df,data.frame(ID=c(4,2,5),v=1:3)),value[order(v)])

答案 1 :(得分:1)

sapply(c(4,2,5), function(x) df[df$ID==x,"value"])