короткая версия: как заменить значения в фрейме данных строкой, найденной в другом фрейме данных?
более длинная версия: я биолог, работающий со многими видами пчел. У меня есть набор данных со многими тысячами пчел. Каждая строка имеет уникальный идентификатор пчелы # вместе со всей соответствующей информацией об этом образце (данные об отлове, местоположение GPS и т. д.). Информация о виде для каждой пчелы не была введена, потому что их идентификация занимает много времени. При идентификации я получаю ящики с сотнями пчел одного вида. Я ввожу их в отдельный фрейм данных. Я пытаюсь написать код, который будет обновлять исходный файл данных информацией о видах (семейство, род, виды, пол и т. д.), когда я идентифицирую пчел. В настоящее время в исходном файле данных информация о видах пуста и интерпретируется как NA в R. Я хочу, чтобы R нашел все уникальные идентификаторы пчел и заполнил информацию о видах, но мне трудно понять, как это сделать. замените значения NA строкой (например, «Andrenidae»)
Вот простой пример того, что я пытаюсь сделать:
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"]
}
Заранее благодарю за любой совет!
Ваше здоровье,
Зак
РЕДАКТИРОВАТЬ:
Я только что заметил, что первые два метода ниже каждый раз добавляют новый столбец, что вызвало бы проблемы, если бы мне нужно было добавлять информацию о видах несколько раз (что я обычно и делаю). Например:
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)
Есть ли способ свернуть столбцы, чтобы у меня был один единый фрейм данных? Или способ обновить rawData, а не добавлять каждый раз новый столбец? Заранее спасибо!