我有这样的df:
color=c('red','red','blue')
red = c(10,30,50)
blue = c(123,456,789)
df = data.frame(color,red,blue)
对于每一行,我想根据哪个colname等于color列中的值来选择列值
例如:
color2=c('red','red','blue')
answer=c(10,30,789)
df2=data.frame(color2, answer)
我尝试过: test = match(df $ color,names(df)) test2 = df [,test]
但这给了我
red=c(10,30,30)
red.1=c(10,30,30)
blue=c(123,456,789)
wrong = data.frame(red,red.1,blue)
答案 0 :(得分:1)
我们可以使用行索引和match
中的列索引来提取值
cbind(df[1], answer = df[-1][cbind(seq_len(nrow(df)),
match(df$color, names(df)[-1]) )])
# color answer
#1 red 10
#2 red 30
#3 blue 789