【发布时间】:2019-12-03 22:04:51
【问题描述】:
> df = data.frame(id = 1:5, ch_1 = 11:15,ch_2= 10:14,selection = c(11,13,12,14,12))
> df
id ch_1 ch_2 selection
1 1 11 10 11
2 2 12 11 13
3 3 13 12 12
4 4 14 13 14
5 5 15 14 12
鉴于此数据集,我需要一个遵循规则的附加列:
- 如果选择是两个选择之一(ch_1 和 ch_2),则返回选择的编号(1 或 2)
- 如果选择不是两个选项中的一个,则返回 3
我需要一种方法来为每一行执行此操作。对于单行,执行以下代码就可以了,但我似乎无法找到一种方法将其与 apply 一起使用以将其运行到数据帧的每一行。寻找可应用于的解决方案不仅仅是两列,而且比传统循环运行得更快
df=df[1,]
if (df$selection %in% df[,paste("ch_",1:2,sep="")]) {
a = which(df[,paste("ch_",1:2,sep="")]==df$selection)
} else {
a = 3
}
# OR
ifelse(df$selection %in% df[,paste("ch_",1:2,sep="")],1,3)
# OR
match(df$selection,df[,paste("ch_",1:2,sep="")])
【问题讨论】:
-
有没有可能有多个列匹配的情况?
-
@thelatemail 不,所有列都必然不同