各行の値をチェックします。変換式を得意とし、私はこのExcelの数式を使用したい
=IF(C2>=70,1,IF(D2>=70,-1,IF(E2>=70,-1,IF(F2>=70,0,IF(G2>=70,-1,IF(H2>=70,1,IF(I2>=70,0,999)))))))
私が70よりも大きい、各行の値をチェックすることを願って、そしてRは、それらの番号を与えるだろうと私はすることができます次の行の数式を自動的に使用します。 また、値はNA
である可能性があります。
各行の値をチェックします。変換式を得意とし、私はこのExcelの数式を使用したい
=IF(C2>=70,1,IF(D2>=70,-1,IF(E2>=70,-1,IF(F2>=70,0,IF(G2>=70,-1,IF(H2>=70,1,IF(I2>=70,0,999)))))))
私が70よりも大きい、各行の値をチェックすることを願って、そしてRは、それらの番号を与えるだろうと私はすることができます次の行の数式を自動的に使用します。 また、値はNA
である可能性があります。
機能のプログラミングには、少なくとも以下の2つの方法があります。最初は複数のif/elseステートメントを記述し、2つ目はifelse()
という非常に大きな呼び出しを行うことです。
関数をどのように使用しているかによって、関数をいくつかの方法で呼び出すことができます。最初にapply
を使用すると、行に適用された式に基づいて計算された値のベクトルが生成されます。出力の各要素は、対応する行列の行からのものになります。 for
ループを使用して行ごとに値を計算することもできます。データのサイズに応じて、これらの各方法の時間を比較して、どちらが最速かを判断することができます。
# function to evaluate all the if/else conditions
f1 <- function(x){
if(x[3] >= 70 && is.na(x[3]) == F){
out <- 1
}else if(x[4] >= 70 && is.na(x[4]) == F){
out <- -1
}else if(x[5] >= 70 && is.na(x[5]) == F){
out <- -1
}else if(x[6] >= 70 && is.na(x[6]) == F){
out <- 0
}else if(x[7] >= 70 && is.na(x[7]) == F){
out <- -1
}else if(x[8] >= 70 && is.na(x[8]) == F){
out <- 1
}else if (x[9] >= 70 && is.na(x[9]) == F){
out <- 0
}else{
out <- 999
}
return(out)
}
# function with a single large function call
f2 <- function(x){
out <- ifelse(x[3]>=70&& is.na(x[3]) == F,1,ifelse(x[4]>=70&& is.na(x[4]) == F,-1,ifelse(x[5]>=70&& is.na(x[5]) == F,-1,ifelse(x[6]>=70&& is.na(x[6]) == F,0,ifelse(x[7]>=70&& is.na(x[7]) == F,-1,ifelse(x[8]>=70&& is.na(x[8]) == F,1,ifelse(x[9]>=70&& is.na(x[9]) == F,0,999)))))))
}
# sample data to test function
# A B C D E F G H I
x <- matrix(c( 0, 0, 71, 0, 0, 0, 0, 0, 0,
0, 0, 0, 70, 0, 0, 0, 0, 0,
0, 10, 1, 0, 71, 0, 10, 90, 0,
99, 0, 0, 69, 67, 90, 99, 1, 0,
0, 0, 0, 0, 0, 0, 70, 0, 0,
0, 0, 0, 0, 0, 0, 0, 71, 0,
0, 0, 0, 0, 0, 0, 0, 0, 72,
0, 0, 0, 0, 0, 0, 0, 0, 1,
NA, NA, NA, NA, 1, 70, 0, NA, 0,
NA, NA, NA, NA, NA, NA, NA, NA, NA),nrow=10,ncol=9,byrow=T)
# method 1: using apply and avoiding loop, with timing
ptm <- proc.time()
out_f1_m1 <- apply(X=x,MARGIN=1,FUN=f1)
time_f1_m1 <- proc.time() - ptm
ptm <- proc.time()
out_f2_m1 <- apply(X=x,MARGIN=1,FUN=f2)
time_f2_m1 <- proc.time() - ptm
# method 2: using a for loop
out_f1_m2 <- rep(NA,nrow(x))
out_f2_m2 <- rep(NA,nrow(x))
ptm <- proc.time()
for(i in 1:nrow(x)){
out_f1_m2[i] <- f1(x[i,])
}
time_f1_m2 <- proc.time() - ptm
ptm <- proc.time()
for(i in 1:nrow(x)){
out_f2_m2[i] <- f2(x[i,])
}
time_f2_m2 <- proc.time() - ptm
ありがとうございます。 – hahakwok
ようこそスタックオーバーフロー。簡単にできるように[すばらしいR再現可能な例を作る方法](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を見てくださいあなたを助ける他の人たち。 –
ifelseコマンドをチェックしてください – Mist
ありがとう、私はテーブルの各値をチェックしたいですか? ifelseを使ってforループを使って自動的に値をチェックする方法はたくさんあります。私は情報を見つけましたが、私は本当に理解していません。 – hahakwok