我想在R语言中测试数据框的每一行是否满足条件,而不使用for循环,并使返回值成为与条件相对应的矩阵元素。以下是一个示例:
ax <- matrix(data=c("x","UP","DN","x"),nrow=2,dimnames=list(c("site1","site2"),c("site1","site2")))
data <- data.frame(Location1=c("site1","site1","site2","site1","site2","site2","site2","site1"),Location2=c("site1","site2","site1","site2","site2","site2","site1","site1"))
这将产生一个矩阵(ax)和数据框(data):
> ax
site1 site2
site1 "x" "DN"
site2 "UP" "x"
> data
Location1 Location2
1 site1 site1
2 site1 site2
3 site2 site1
4 site1 site2
5 site2 site2
6 site2 site2
7 site2 site1
8 site1 site1
现在,如果location1与location2不同,我想获取相应的矩阵元素,告诉我该运动的方向。我以前使用过类似于ifelse语句的内容,但是当尝试查询单独的矩阵时,得到正确的输出确实让我困扰..我的代码是:
data$movement <-ifelse(data$Location1!=data$Location2,ax[as.character(data$Location1),as.character(data$Location2)],"x")
但这会导致产生以下输出:
data
Location1 Location2 movement
1 site1 site1 x
2 site1 site2 x
3 site2 site1 UP
4 site1 site2 x
5 site2 site2 x
6 site2 site2 x
7 site2 site1 UP
8 site1 site1 x
看起来这应该是一个简单的问题,但我似乎想不出来,非常感谢您的帮助。