Почему мой новый фрейм данных создает две новые переменные, когда я объединяю два фрейма данных вместе с помощью функции cbind () в R?

#r #dataframe #data-analysis

#r #фрейм данных #анализ данных

Вопрос:

В настоящее время я работаю над проектом анализа данных, но проблема в том, что новый фрейм данных, который я создал, странный.

 mycob1 <- read.csv("MYCOB_1.csv")
mycob1
     Date      Direction     RFU        Ct
1  Lot_210927         0    6.3588  9.164329
2  Lot_210927         0    5.0394 11.350701
3  Lot_210927         0    4.9946 37.334669
4  Lot_210927         0    4.8604  8.168337
5  Lot_210927         0    4.9032 37.306613
6  Lot_210927         0    4.9502 22.176353
7  Lot_210927         0    4.7858 23.713427
8  Lot_210927         0    5.2778 10.496994
9  Lot_210927         1 1021.8458 32.119668
10 Lot_210927         1 1020.1998 31.500716
11 Lot_210927         1 1065.8000 31.979674
12 Lot_210927         1  988.0452 31.019754
13 Lot_210927         1 1085.2206 31.557973
14 Lot_210927         1 1072.8540 31.745491
15 Lot_210927         1 1020.6496 31.218151
16 Lot_210927         1  983.4106 31.981162
mycob2 <- read.csv("MYCOB_2.csv")
mycob2
Date Direction       RFU       Ct
1  Lot_211020         0    0.6876 47.72087
2  Lot_211020         0   40.1056 38.37418
3  Lot_211020         0   97.0882 37.72917
4  Lot_211020         0   10.3170 36.18236
5  Lot_211020         0   67.3742 37.39050
6  Lot_211020         0   10.2540 40.16776
7  Lot_211020         0    6.9624 28.07575
8  Lot_211020         0    9.5718 28.84626
9  Lot_211020         0   13.0306 38.87375
10 Lot_211020         1  860.3956 29.15746
11 Lot_211020         1  884.9338 30.03665
12 Lot_211020         1 1552.2462 27.90839
13 Lot_211020         1  738.2328 29.22760
14 Lot_211020         1 1419.6448 29.13627
15 Lot_211020         1 1441.6212 29.35351
16 Lot_211020         1  424.9774 31.56446

mycob12 <- cbind(mycob1, mycob2, by.x = "Lot_210927", by.y = "Lot_211020")
mycob12
         Date Direction       RFU        Ct       Date Direction       RFU       Ct       by.x       by.y
1  Lot_210927         0    6.3588  9.164329 Lot_211020         0    0.6876 47.72087 Lot_210927 Lot_211020
2  Lot_210927         0    5.0394 11.350701 Lot_211020         0   40.1056 38.37418 Lot_210927 Lot_211020
3  Lot_210927         0    4.9946 37.334669 Lot_211020         0   97.0882 37.72917 Lot_210927 Lot_211020
4  Lot_210927         0    4.8604  8.168337 Lot_211020         0   10.3170 36.18236 Lot_210927 Lot_211020
5  Lot_210927         0    4.9032 37.306613 Lot_211020         0   67.3742 37.39050 Lot_210927 Lot_211020
6  Lot_210927         0    4.9502 22.176353 Lot_211020         0   10.2540 40.16776 Lot_210927 Lot_211020
7  Lot_210927         0    4.7858 23.713427 Lot_211020         0    6.9624 28.07575 Lot_210927 Lot_211020
8  Lot_210927         0    5.2778 10.496994 Lot_211020         0    9.5718 28.84626 Lot_210927 Lot_211020
9  Lot_210927         1 1021.8458 32.119668 Lot_211020         0   13.0306 38.87375 Lot_210927 Lot_211020
10 Lot_210927         1 1020.1998 31.500716 Lot_211020         1  860.3956 29.15746 Lot_210927 Lot_211020
11 Lot_210927         1 1065.8000 31.979674 Lot_211020         1  884.9338 30.03665 Lot_210927 Lot_211020
12 Lot_210927         1  988.0452 31.019754 Lot_211020         1 1552.2462 27.90839 Lot_210927 Lot_211020
13 Lot_210927         1 1085.2206 31.557973 Lot_211020         1  738.2328 29.22760 Lot_210927 Lot_211020
14 Lot_210927         1 1072.8540 31.745491 Lot_211020         1 1419.6448 29.13627 Lot_210927 Lot_211020
15 Lot_210927         1 1020.6496 31.218151 Lot_211020         1 1441.6212 29.35351 Lot_210927 Lot_211020
16 Lot_210927         1  983.4106 31.981162 Lot_211020         1  424.9774 31.56446 Lot_210927 Lot_211020
 

Для пояснения, «Направление» просто указывает, является ли образец положительным или отрицательным. Я хочу выяснить, существует ли корреляция между переменными RFU и Ct и Direction. Но, похоже, я не могу придумать, как это сделать. Странная часть этого нового фрейма данных, который я создал под названием «mycob12», заключается в том, что он создает две новые переменные в конце с именами «by.x» и «by.y», и я не уверен, что я могу сделать, чтобы удалить их. Есть ли способ удалить переменные?

редактировать: я хотел бы использовать эти фреймы данных и создавать с ними графики для изучения любых шаблонов с direction, RFU и Ct. Я думал об удалении даты и просто наложении нескольких фреймов данных друг на друга.

Спасибо!

Комментарии:

1. Вам нужно использовать merge , а не cbind . ( cbind не имеет аргументов by , by.x , или by.y , поэтому они воспринимаются как c ссылки bind на другие.)

2. Кроме того, by* аргументам нужны имена столбцов, а не значения.

3. На самом деле, я больше не уверен merge . Я думаю, вам нужно вручную создать фрейм, который вы ожидаете от этой операции.

4. Или, может rbind быть? Было бы очень полезно, если бы вы показали небольшой пример (скажем, 3 строки из каждого фрейма данных), а затем также показали, каким вы хотите получить результат. Если вы хотите, чтобы два фрейма данных находились рядом в одном фрейме данных, cbind(mycob1, mycob2) . Если вы хотите, чтобы они располагались друг над другом в одном фрейме данных, rbind(mycob1, mycob2) . Если вы хотите что-то еще, пожалуйста, сообщите нам, что это такое.

5. Спасибо за помощь. Я согласен с вами @r2evans. Я пытался использовать merge a перед cbind, и это доставило мне много проблем.

Ответ №1:

Я не уверен, что именно вы пытаетесь сделать, но, глядя на ваши данные, кажется, имеет смысл просто сложить оба фрейма данных, а затем отсортировать их Date с помощью переменной.

Следуя вашим фреймам данных выше:

 df1 <- data.frame(Date = c("Lot_210927","Lot_210927","Lot_210927"),
                  Direction = c(0,0,0),
                  RFU = c(6.3588,5.0394,4.9946),
                  Ct = c(9.164329,11.350701,37.334669))

df2 <- data.frame(Date = c("Lot_211020","Lot_211020","Lot_211020"),
                  Direction = c(0,0,0),
                  RFU = c(0.6876,40.1056,97.0882),
                  Ct = c(47.72087,38.37418,37.72917))
 

Вы можете сложить их с помощью tidyverse, используя bind_rows : (обратите внимание, что он просто наложит оба фрейма данных. Я бы рекомендовал использовать это только в том случае, если у вас одинаковые имена столбцов и типы данных — например, числовые, символьные и т. Д. — В обоих фреймах данных, Иначе вам следует использовать что-то вроде left_join из tidyverse )

 library(tidyverse)

df_merged <- bind_rows(df1,df2)

df_merged
        Date Direction     RFU        Ct
1 Lot_210927         0  6.3588  9.164329
2 Lot_210927         0  5.0394 11.350701
3 Lot_210927         0  4.9946 37.334669
4 Lot_211020         0  0.6876 47.720870
5 Lot_211020         0 40.1056 38.374180
6 Lot_211020         0 97.0882 37.729170
 

Затем вы могли бы создать корреляционную матрицу следующим образом:

 df_num <- df_merged[, c(2:4)]


df_cor <- round(cor(df_num),2)

df_cor %>%
  head()

          Direction  RFU   Ct
Direction         1   NA   NA
RFU              NA 1.00 0.29
Ct               NA 0.29 1.00
 

Просто изолируем числовые переменные и строим с ними корреляционную матрицу. Очевидно, что это не очень интересно с 6 точками данных и направлением, всегда равным 0, но с вашим полным набором данных это должно быть хорошей отправной точкой.

Комментарии:

1. Особенно для новых пользователей я бы рекомендовал не использовать слово join для обозначения того, что rbind делает. стек — лучший термин. Сохраните соединение для merge() *_join операций /, где сопоставление происходит на основе значений столбцов.

2. Конечно, это справедливо, я отредактирую свой пост.

3. Спасибо @James! Это спасло мне жизнь. Я надеюсь, что в моем посте редактирования все было более понятно?

4. Рад, что это помогло @Dlun! Было бы удивительно, если бы вы могли принять мой ответ 🙂