R: извлечение определенных строк из фрейма данных

#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 Всегда приятно 🙂