短いバージョン:データフレーム内の値を別のデータフレーム内の文字列に置き換えるにはどうすればよいですか?データフレーム内の値をRの文字列に置き換えるにはどうすればよいですか?
より長いバージョン:私は多くの種のミツバチを扱う生物学者です。私は何千ものミツバチのデータセットを持っています。各行には、その標本に関するすべての関連情報(捕捉のデータ、GPSの位置など)とともに固有の蜂のID番号が付いています。各蜂の種情報は、それらを識別するのに長い時間がかかるので、入力されていません。私がIDingするとき、私は同じ種類のすべてのミツバチの箱で終わります。私はこれらを別のデータフレームに入力します。私はミツバチのIDとして、種情報(家族、属、種、性別など)を元のデータファイルに更新するコードを記述しようとしています。現在のところ、元のデータファイルでは、種情報は空白で、R内のNAと解釈されます。Rにすべての固有の蜂のID番号を見つけて種情報を記入したいのですが、どのようにしかしと、私が欲しいよう
rawData<-data.frame(beeID=c(1:20),family=rep(NA,20))
speciesInfo<-data.frame(beeID=seq(1,20,3),family=rep("Andrenidae",7))
rawData[rawData$beeID == 4,"family"] <- speciesInfo[speciesInfo$beeID == 4,"family"]
だから、私は物事を交換しています:ここで
は私がやろうとしています何の簡単な例である文字列(例えば「Andrenidae」)とNA値を置き換えます家族名(文字列)ではなく数字です。私は最終的にやりたいことは例えば、すべての種の情報を追加するには少しループを書く:何かアドバイスを事前にfor (i in speciesInfo$beeID){
rawData[rawData$beeID == i,"family"] <- speciesInfo[speciesInfo$beeID == i,"family"]
}
感謝です!
乾杯、
ザック
編集:私は種の情報を複数回追加する必要がある場合
が、私はちょうど最初の2つの方法は、以下の問題を引き起こすことになる、毎回新しい列を追加することに気づきました(私が通常やっている)。例:
rawData<-data.frame(beeID=c(1:20),family=rep(NA,20))
Andrenidae<-data.frame(beeID=seq(1,20,3),family=rep("Andrenidae",7))
Halictidae<-data.frame(beeID=seq(1,20,3)+1,family=rep("Halictidae",7))
# using join
library(plyr)
rawData <- join(rawData, Andrenidae, by = "beeID", type = "left")
rawData <- join(rawData, Halictidae, by = "beeID", type = "left")
# using merge
rawData <- merge(x=rawData,y=Andrenidae,by='beeID',all.x=T,all.y=F)
rawData <- merge(x=rawData,y=Halictidae,by='beeID',all.x=T,all.y=F)
1つの統一データフレームを持つように列を折りたたむ方法はありますか?または毎回新しい列を追加するのではなく、rawDataを更新する方法ですか?前もって感謝します!
ワンダフル、おかげで興味を持っているデータです! – Arturito