假设有一个数据框如下:
data <- data.frame('obs' = c('a','c','b'), 'top1' = c('a','b','c'), 'top2' = c('b', 'c', 'f'), 'top3' = c('g', 'h', 'd'))
我想计算一个新列topn
,它是一个条件,按照以下方式工作:如果obs
的值在任何一个top
列中,则topn
应该等于obs
,否则topn
可以被赋予任何值,比如说top1
。当然我知道我可以用or
和ifelse
来实现这个目的,但我正在寻找一种更短的写法,因为在我的表格中我最多可以有10个top
列。
obs top1 top2 top3 topn
a a b g a
c b c h c
b c f d c
data $ topn = data [cbind(1:nrow(data),apply(data,1,function(x)1 +!(x [1]%in% x [-1])))]
- Pierre L