R:列值列表中的行索引列表?

时间:2014-12-05 17:37:53

标签: r indexing row

在R中,如何根据另一列中指定的值列表索引一个R列的值列表?

我知道如何选择和修改特定的行号,例如:

> foo=data.frame(a=100*1:5,b=LETTERS[5:1])
> foo
    a b
1 100 E
2 200 D
3 300 C
4 400 B
5 500 A
> foo$a[c(1,3,5)]= foo$a[c(1,3,5)] + c(3,2,1)
> foo
    a b
1 103 E
2 200 D
3 302 C
4 400 B
5 501 A

但是,如果我想要选择并修改' b'价值观" A"," E"和" C"?我认为which可能是正确的工具,但我能想出的最好的工具是:

> foo$a[which(is.element(foo$b,c("A","E","C")))]
[1] 103 302 501

此时我被卡住了,因为虽然我选择了正确的行,但它们的顺序并不正确,所以我无法单独修改它们。

2 个答案:

答案 0 :(得分:3)

如果您不关心匹配订单,则移除is.element并使用%in%是一种解决方案

[edit] - 也可以删除which

foo$a[foo$b %in% c("A","E", "C")]

另一种可能性是使用match来提供每个元素的索引。

foo$a[match(c("A","E","C"),foo$b)]
[1] 500 100 300

答案 1 :(得分:1)

这是你想要的吗?

foo$a[match(c("A","E","C"),foo$b)]