#r #dataframe #merge #subset #extract
#r #фрейм данных #слияние #подмножество #извлечь
Вопрос:
вот пример фрейма данных:
df1<-data.frame(c("A","B","C","D","F","G"),c(1,4,2,5,3,6), c(50,23,52,15,40,49))
colnames(df1)<-c("individual.ID","brood","weight")
df2<-data.frame(c("B","D","F"),c(1,2,3))
colnames(df2)<-c("mother.ID","brood.mother")
Я пытаюсь решить задание для своего класса программирования, и я занимаюсь этим уже два часа, но, похоже, не могу его решить.
Задача состоит в том, чтобы сопоставить вес матерей с весом особей. Матери включены в данные отдельных лиц.
Выводок в df1 обозначает выводок, в котором родилась эта особь, выводок в df2 обозначает, какой выводок родила мать (надеюсь, это не слишком запутанно)
Я не могу понять, как извлечь данные матерей из фрейма данных. Я думаю, было бы лучше, если бы я мог разделить первый столбец df1 на матерей и не матерей. Я подозреваю, что нужно как-то использовать merge(), потому что это была главная тема урока. Я пытался извлечь данные путем простого индексирования и подмножества с использованием символьной строки идентификаторов материнских плат, но это не работает (и, вероятно, глупо пытаться)
df1[df2$mother,]
subset(df1, ID==df2$mother, select="weight")
Индексирование или поднабор вручную — это не вариант, потому что данные, которые я использую, имеют длину в несколько сотен строк.
Кроме того, нам разрешено использовать только базовый пакет R, так что я был бы рад любым идеям, которые с этим работают!
Спасибо 🙂
Комментарии:
1. Не удалось получить ваше требование, вы ищете это: merge(df1, df2, by.x = ‘индивидуальный. ID’, by.y = ‘mother.ID ‘)
2. Являются ли эти люди B, D, F в df1 теми же матерями df2?
Ответ №1:
Это может направить вас на какой-то четкий путь. Объединить фреймы данных и создать флаг для материнского / не материнского:
#Code
Merged <- merge(df1,df2,by.x=c('individual.ID'),by.y = c('mother.ID'),all.x = T)
#Flag
Merged$Flag <- 'Non-Mother'
Merged$Flag[!is.na(Merged$brood.mother)]<-'Mother'
Выходной сигнал:
Merged
individual.ID brood weight brood.mother Flag
1 A 1 50 NA Non-Mother
2 B 4 23 1 Mother
3 C 2 52 NA Non-Mother
4 D 5 15 2 Mother
5 F 3 40 3 Mother
6 G 6 49 NA Non-Mother
Комментарии:
1. @schinken Всегда приятно 🙂