私は次のようである持っているサンプルデータ、チェック
main_data = data.frame(var1 = c('abd_cde', 'BPCS', 'POIU', 'CDRD', 'UPqw', 'qwer')),
main_data
var1
1 abd_cde
2 BPCS
3 POIU
4 CDRD
5 UPqw
6 qwer
私はいくつかの条件を確認したい、次のコードを持っていますある変数に別の変数を出力します。以下は、それがBまたはCで始まる場合、出力2にしたい、私は変数iが出力1にしたい、「_」が含まれている場合、コードの要点を与えるために、
main_data$var2 = 0
for (i in 1:nrow(main_data)) {
if(grepl("_", main_data$var1[i]) == TRUE){
main_data$var2[i] = "1"
}
else if((substr(main_data$var1[i], 1, 1) == 'B') | (substr(main_data$var1[i], 1, 1) == 'C')){
main_data$var2[i] = "2"
}
else if((substr(main_data$var1[i], 1, 1) == 'P') | (substr(main_data$var1[i], 1, 1) == 'U')){
main_data$var2[i] = "3"
}
}
を書かれているコードですPまたはUで始まる場合は3を出力したい。
しかし、このコードは実行に約200万のレコードがあるので、実行には多くの時間がかかります。これを効率化できる方法はありますか?
私の理想的な出力は次のようになり、
var1 var2
1 abd_cde 1
2 BPCS 2
3 POIU 3
4 CDRD 2
5 UPqw 3
6 qwer 0
は、誰もがこれを行うに私を助けることができますか?
おかげ
あなたは(例えば、複数のifelse
文を使用して)単一の式にこれを組み合わせることができ、これは読み非常に簡単ですし、ループよりも高速である必要があり
これを再現可能な例にすることはできますか?お読みください:http://stackoverflow.com/help/mcve –
あなたのリストのどの条件も満たされない場合はどうなりますか? – Psidom
@Psidom私は基底として0を持っています、それらのどれも満足されなければ、それは0 – haimen