Я ищу метод для создания нового фрейма данных из одного с несколькими данными
Может быть, это все еще просто для вас, но я не могу действительно получить желаемый результат, может быть, некоторые r специалисты могли бы просветить меня?
Вот первый df:
Col1 Col2 Event Colvalue1 Colvalue2
Group1 Sp1.1 1 0.20 A
Group1 Sp1.2 1 0.20 A
Group1 Sp2.1 1 0.20 B
Group1 Sp3.1 2 0.12 B
Group1 Sp4.2 2 0.12 B
Group1 Sp5.1 2 0.12 B
Group1 Sp1.3 3 1.40 C
Group1 Sp1.4 3 1.40 C
Group1 Sp6.1 3 1.40 C
Group2 Sp6.1 1 1.20 D
Group2 Sp7.1 1 1.20 D
Group2 Sp9.3 1 1.20 D
Group2 Sp8.1 1 1.20 D
Group2 Sp8.2 2 0.40 E
Group2 Sp9.1 2 0.40 E
Group2 Sp9.2 2 0.40 E
Group2 Sp10.1 3 NA NA
Group2 SP11.2 3 NA NA
Group2 SP12.1 3 NA NA
Group3 Sp1.1 1 5.2 F
Group3 Sp2.1 1 5.2 F
Group3 Sp3.1 1 5.2 F
Group3 Sp4.1 2 0.3 G
Group3 Sp4.2 2 0.3 G
Group3 Sp1.2 2 0.3 G
Group3 Sp8.1 2 0.3 G
Идея состоит в том, чтобы получить new_df
вывод:
Species Group1 Group2 Group3
Sp1 A NA G
Sp2 B NA NO
Sp3 B NA NO
Sp4 B NA G
Sp5 B NA NA
Sp6 C D NA
Sp7 NA D NA
Sp8 NA E G
Sp9 NA E NA
Sp10 NA X NA
Sp11 NA X NA
Sp12 NA X NA
Вот объяснение: Идея состоит в том, чтобы сначала go через каждую группу в df1
. Давайте возьмем первое:
Col1 Col2 Event Colvalue1 Colvalue2
Group1 Sp1.1 1 0.20 A
Group1 Sp1.2 1 0.20 A
Group1 Sp2.1 1 0.20 B
Group1 Sp3.1 2 0.12 B
Group1 Sp4.2 2 0.12 B
Group1 Sp5.1 2 0.12 B
Group1 Sp1.3 3 1.40 C
Group1 Sp1.4 3 1.40 C
Group1 Sp6.1 3 1.40 C
из этой группы. Я хочу создать new_df
с именем Group1
и в имени строки все Spname
, присутствующие во всех df1
:
Species Group1
Sp1
Sp2
Sp3
Sp4
Sp5
Sp6
Sp7
Sp8
Sp9
Sp10
Sp11
Sp12
** Как заполнить эту таблицу? ** Чтобы решить, что поставить на Sp1
в Group1
, я смотрю, где этот вид присутствует в Group1:
Col1 Col2 Event Colvalue1 Colvalue2
Group1 Sp1.1 1 0.20 A
Group1 Sp1.2 1 0.20 A
Group1 Sp1.3 3 1.40 C
Group1 Sp1.4 3 1.40 C
Я смотрю на столбец Colvalue1 и сохраняю только событие с наименьшим значением здесь Event=1
с Colvalue1=0.20
против Colvalue1=1.40
для Event3
. Это все, что у меня осталось:
Col1 Col2 Event Colvalue1 Colvalue2
Group1 Sp1.1 1 0.20 A
Group1 Sp1.2 1 0.20 A
Вот так я знаю, я собираюсь добавить письмо в столбец Colvalue2
здесь: C
:
Species Group1
Sp1 A
Sp2
Sp3
Sp4
Sp5
Sp6
Sp7
Sp8
Sp9
Sp10
Sp11
Sp12
и и так далее ...
еще один пример для Sp2
в Group1
:
Здесь он присутствует только один раз:
Group1 Sp2.1 1 0.20 B
, поэтому я заполняю в письме B
:
Species Group1
Sp1 A
Sp2 B
Sp3
Sp4
Sp5
Sp6
Sp7
Sp8
Sp9
Sp10
Sp11
Sp12
и то же самое для Sp3,4, 5
& Sp6
:
Species Group1
Sp1 A
Sp2 B
Sp3 B
Sp4 B
Sp5 B
Sp6 C
Sp7
Sp8
Sp9
Sp10
Sp11
Sp12
с другой стороны Sp7,8
и 9
нет в этой группе, поэтому я добавляю NA
:
Species Group1
Sp1 A
Sp2 B
Sp3 B
Sp4 B
Sp5 B
Sp6 C
Sp7 NA
Sp8 NA
Sp9 NA
Sp10 NA
Sp11 NA
Sp12 NA
давайте go к Group2
...:
Col1 Col2 Event Colvalue1 Colvalue2
Group2 Sp6.1 1 1.20 D
Group2 Sp7.1 1 1.20 D
Group2 Sp9.3 1 1.20 D
Group2 Sp8.1 1 1.20 D
Group2 Sp8.2 2 0.40 E
Group2 Sp9.1 2 0.40 E
Group2 Sp9.2 2 0.40 E
Здесь Sp1,2,3,4
и 5
отсутствуют, поэтому я добавляю NA
, а Sp6
и Sp7
присутствуют только в Event1
, поэтому я добавляю соответствующее письмо (D
):
Species Group1 Group2
Sp1 A NA
Sp2 B NA
Sp3 B NA
Sp4 B NA
Sp5 B NA
Sp6 C NA
Sp7 NA D
Sp8 NA
Sp9 NA
Sp10 NA
Sp11 NA
Sp12 NA
Однако, Sp8
и Sp9
присутствуют в Events 1
и 2
: Событие, для которого Sp8
имеет smallest value
в Colvalue1
, равно Event 2
(поэтому оно будет иметь букву E
). Событие, для которого Sp9
имеет smallest value
в Colvvalue1
, равно Event 2
(поэтому оно будет иметь букву E
).
Species Group1 Group2
Sp1 A NA
Sp2 B NA
Sp3 B NA
Sp4 B NA
Sp5 B NA
Sp6 C NA
Sp7 NA D
Sp8 NA E
Sp9 NA E
Sp10 NA
Sp11 NA
Sp12 NA
А затем для Sp10,11
& 12
в Event3
нет Colvalue1
, поэтому я просто поставил X
.
Species Group1 Group2
Sp1 A NA
Sp2 B NA
Sp3 B NA
Sp4 B NA
Sp5 B NA
Sp6 C NA
Sp7 NA D
Sp8 NA E
Sp9 NA E
Sp10 NA X
Sp11 NA X
Sp12 NA X
Вот вещь, я надеюсь, она достаточно ясна, не стесняйтесь задавать вопросы, если какие-либо вопросы остаются неясными. Если кто-нибудь может мне помочь, это было бы очень мило с его стороны. В то же время, вы все заботитесь о себе в это сложное время ...
Добавление сложности в Group3
:
Здесь, когда Colvalue1 равен > to 5
, тогда я значение NO
если нет другого Colvalue1 <=
, чем 5
.
Group3 Sp1.1 1 5.2 F
Group3 Sp2.1 1 5.2 F
Group3 Sp3.1 1 5.2 F
Group3 Sp4.1 2 0.3 G
Group3 Sp4.2 2 0.3 G
Group3 Sp1.2 2 0.3 G
Group3 Sp8.1 2 0.3 G
, поэтому здесь, в Событии 1, например, Sp1
: Group3 Sp1.1 1 5.2 F Group3 Sp1.2 2 0.3 G
имеет Colvalue1 > 5
в Event1
, но также имеет Colvalue1 = 0.3
в Event2
, поэтому принимает значение G
.
Но для Sp2
он присутствует только в Event1 с Colvalue1 > 5
, поэтому я просто присваиваю значение NO
.
Вот кадр данных:
dput (head (df))
structure(list(Col1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Group1",
"Group2", "Group3"), class = "factor"), Col2 = structure(c(1L,
2L, 8L, 9L, 11L, 12L), .Label = c("Sp1.1", "Sp1.2", "Sp1.3",
"Sp1.4", "Sp10.1", "SP11.2", "SP12.1", "Sp2.1", "Sp3.1", "Sp4.1",
"Sp4.2", "Sp5.1", "Sp6.1", "Sp7.1", "Sp8.1", "Sp8.2", "Sp9.1",
"Sp9.2", "Sp9.3"), class = "factor"), Event = c(1L, 1L, 1L, 2L,
2L, 2L), Colvalue1 = c(0.2, 0.2, 0.2, 0.12, 0.12, 0.12), Colvalue2 = c("A",
"A", "B", "B", "B", "B"), Mean_dNdS = c(NA_character_, NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_)), class = c("data.table",
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x7f8afd8052e0>)