- 追加された行はこの色です。
- 削除された行はこの色です。
[[Rの備忘録]]
たとえば,ある列に日本語文字列を含むデータフレームがあるとして,その列の要素がある条件集合のどれかにマッチしていれば 1,そうでなければ 0 を返すという処理を,for ではなく,apply 族を使って実行したいとする.
# こんなデータフレーム
unique(dat1$gobi) # 語尾を一通り見てみる
[1] "ですか" "ますか" "んか" "っすか" "ていい" ...
dat1$not <- ifelse( dat1[dat1$gobi == "んか" |
dat1$gobi == "くれん"|
dat1$gobi == "くれない"|
dat1$gobi == "くれへん"|
dat1$gobi == "もらえへん", "ID"]),
1, 0)
あるいは
for(i in 1:length(dat1$gobi)){
dat1$not[i] <- ifelse(dat1$gobi[i]
%in% c("んか", "くれん", "くれない", "くれへん", "もらえへん"), 1, 0)
}
sum(dat1$not)
ただし,次はダメ
dat1$not <- ifelse(any(dat1$gobi == "んか"|dat1$gobi == "くれん"|
dat1$gobi == "くれない"| dat1$gobi == "くれへん"|
dat1$gobi == "もらえへん"), 1,0)
dat1$not <- ifelse(any(dat1$gobi
%in% c("くれん", "くれない", "くれへん", "もらえへん")), 1,0)
sum(dat1$not)
//この場合,最初の五つのデータ1:5について,それぞれ条件の五つの要素一対一に比較し,データの6-10では,再び条件の頭の要素1:5 を一対一にべるということをやってしまう.つまり,条件の五つのベクトルを使いまわしてしまう.
さて,これを無理に?apply系関数を使ってやってみる?
#article