私は、条件のために私のデータフレームの各行をテストしていますが、rのforloopを使わずに戻り値を返すことは条件に対応する別個の行列。ここでの例である:ifelse文がRの条件付き行列要素を返すR
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)及びデータフレーム(データ)をもたらす:
> 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が位置2と異なる場合今、私が取得したいですその動きの方向を私に知らせる対応する行列要素。
data$movement <-ifelse(data$Location1!=data$Location2,ax[as.character(data$Location1),as.character(data$Location2)],"x")
しかし、これは、この出力になり:私は私のコードは..です前に、このような文ifelse使用しましたが、別のマトリックスを照会しようとしたときに正しい出力を得ることは本当に私を逃亡さ
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
任意のヘルプは大幅にあなたが実際に行列をサブセットする行と列の名前やインデックスのマトリックスを使用することができます