在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
此时我被卡住了,因为虽然我选择了正确的行,但它们的顺序并不正确,所以我无法单独修改它们。
答案 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)]