我有一个数据框,例如:
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
有什么建议吗?
谢谢!
答案 0 :(得分:2)
您可以通过新引入的排名列使用merge
和order
:
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"])