Мне нужна помощь с использованием r фреймов данных.Вот кадр данных:
group col1 col2 name
1 dog 40 canidae
1 dog 40 canidae
1 dog 40 canidae
1 dog 40 canidae
1 dog 40
1 dog 40 canidae
1 dog 40 canidae
2 frog 85 dendrobatidae
2 frog 89 leptodactylidae
2 frog 89 leptodactylidae
2 frog 82 leptodactylidae
2 frog 89
2 frog 81
2 frog 89 dendrobatidae
3 horse 87 equidae1
3 donkey 76 equidae2
3 zebra 67 equidae3
4 bird 54 psittacidae
4 bird 56
4 bird 34
5 bear 67
5 bear 54
То, что я хотел бы получить, это добавить столбец "consensus_name" и получить:
group col1 col2 name consensus_name
1 dog 40 canidae canidae
1 dog 40 canidae canidae
1 dog 40 canidae
1 dog 40 canidae canidae
1 dog 40 canidae canidae
2 frog 85 dendrobatidae leptodactylidae
2 frog 89 leptodactylidae leptodactylidae
2 frog 89 leptodactylidae leptodactylidae
2 frog 82 leptodactylidae leptodactylidae
2 frog 89 leptodactylidae
2 frog 81 leptodactylidae
2 frog 89 dendrobatidae leptodactylidae
3 horse 87 equidae1 equidae3
3 donkey 76 equidae2 equidae3
3 zebra 67 equidae3 equidae3
4 bird 54 psittacidae psittacidae
4 bird 56 psittacidae
4 bird 34 psittacidae
5 bear 67 NA
5 bear 54 NA
Для того, чтобы получить этот новый столбец для каждогогруппа, я получаю имя, которое является наиболее представительным в группе.
Для group1
есть 4 строки с именем 'canidae'
и одна без нуля, поэтому для каждогоодин я пишу 'canidae'
в столбце consensus_name
Для group2
есть 2 строки с именем 'dendrobatidae'
, 2 без знака и 3 строки с именем 'leptodactylidae'
поэтому для каждого я пишу 'leptodactylidae'
в столбце consensus_name
.
Для group3
есть 3 строки с разными именами, так что нет единого мнения, Я получаю имя, которое в качестве самого низкого col2
числа, поэтому я пишу 'equidae3'
в столбце consensus_name
.
Для группы 4 только одна строка имеет информацию,так что это консенсус_имя group4
, поэтому я пишу psittacidae
в столбце consensus_name
.
Для group5
информации нет, просто напишите NA в столбце consensus_name
.
У кого-нибудь есть идеи сделать это с R?Спасибо за вашу помощь:)
Вот df:
structure(list(group = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), col1 = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 3L, 6L,
1L, 1L, 1L), .Label = c("bird", "dog", "donkey", "frog", "horse",
"zebra"), class = "factor"), col2 = c(40L, 40L, 40L, 40L, 40L,
40L, 40L, 85L, 89L, 89L, 82L, 89L, 81L, 89L, 87L, 76L, 67L, 54L,
56L, 34L), name = structure(c(2L, 2L, 2L, 2L, 1L, 2L, 2L, 3L,
7L, 7L, 7L, 1L, 1L, 3L, 4L, 5L, 6L, 8L, 1L, 1L), .Label = c("",
"canidae", "dendrobatidae", "equidae1", "equidae2", "equidae3",
"leptodactylidae", "psittacidae"), class = "factor")), class = "data.frame", row.names = c(NA,
-20L))
реальный имеет около 50 000 строк.