短いバージョン: データ フレーム内の値を別のデータ フレーム内にある文字列に置き換えるにはどうすればよいですか?
より長いバージョン: 私は多くの種のミツバチを研究している生物学者です。何千ものミツバチのデータセットがあります。各行には、その標本に関するすべての関連情報 (捕獲データ、GPS 位置など) とともに、一意のハチ ID # があります。ミツバチの識別には時間がかかるため、各ミツバチの種情報は入力されていません。IDing を行うと、すべて同じ種の数百匹のミツバチが入った箱にたどり着きます。これらを別のデータ フレームに入力します。ミツバチを識別しながら、元のデータ ファイルを種の情報 (科、属、種、性別など) で更新するコードを作成しようとしています。現在、元のデータ ファイルでは、種情報は空白であり、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"]
だから、私は好きなように物事を置き換えていますが、姓(文字列)ではなく数字に置き換えています。私が最終的にやりたいことは、すべての種の情報を追加する小さなループを書くことです。
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 を更新する方法はありますか? 前もって感謝します!