いまだに、置換やreshape()でつまずく。なかなかRは使いこなせないねぇ…。それが出来るだけでもずいぶん人生は楽になるはずなんだが…。tapply()がやっと使えるようになったけど、barplot(), barchart()はNAを受け付けないというワナにはまりましたよー。apply()&sapply()で置換なんて全然思いつかないよ…。NAが一列にまとまっているなら、is.na()の出番です。lattice好きはreshape()マスターしたいよね。では、忘れないようにメモメモ。
置換技
d$RP <- factor(c("0" = "0-1 year", "1" = "1-20 year", "20" = "20< year")
[as.character(d$RP)])
#良くある一連の流れ
#plot&種ごとのvolの合計値
d.sum <- tapply(d$vol, d[,c("spc","plot.ID")], sum)
#NAを0に置換
d.sum <- apply(
d.sum, 2,
function(v) sapply(v, function(x) ifelse(is.na(x), 0, x))
)
#dの作図
pdf(file="d_vol.pdf", paper = "A4", family="Japan1")#日本語
par(las =2, cex =0.8)
barplot(
d.sum,
col=rainbow(11),
ylim = c(0,70),
main="Volume (m^3)"
)
legend(
"top",
legend=rev(rownames(d.sum)),
fill= rev(rainbow(11)),
ncol = 1
)
dev.off()
#latticeのためにreshapeしよう。
colnames(d.sum) <- paste("vol.", colnames(d.sum), sep="") #volつけるのがミソ
d.sum2 <- data.frame(d.sum)
d.sum2$spc <- rownames(d.sum) #繰り返されるspc列を追加
d.sum3 <- reshape(d.sum2,
varying = colnames(d.sum), #展開対象の列、volに入る
timevar = "plot.ID", #新しい列の列名
direction = "long"
)
#ここでNAが残っているなら↓で置換
#d.sum3[is.na(d.sum3$vol), "vol"] <- 0
#------おまけ
str(), subset()