R: переименовать столбцы в функции данных второго кадра данных (данные без привязки) - PullRequest
2 голосов
/ 28 января 2020

Контекст: Я провел двойной слепой психологический эксперимент (что означает, что ни участник, ни эксперимент новый в каком состоянии они были). Существует два сеанса: сеанс1 и сеанс2, а также два условия SHAM и реальный tDCS.

Основной набор данных: Данные структурированы следующим образом:

df<- structure(list(ID = 1:4, session1_Con_rt_mean = c(537.34, 541.9, 548.76, 
621.35), session1_Incon_rt_mean = c(646.83, 689.4, 614.57,  640.6), 
session2_Con_rt_mean = c(565.42, 547.23, 536.4, 564.15), 
session2_Incon_rt_mean = c(647.53, 660.68, 641.9, 606.52)), 
row.names = c(NA, 4L), class = "data.frame")

>df
  ID session1_Con_rt_mean session1_Incon_rt_mean session2_Con_rt_mean session2_Incon_rt_mean
1  1               537.34                 646.83               565.42                 647.53
2  2               541.90                 689.40               547.23                 660.68
3  3               548.76                 614.57               536.40                 641.90
4  4               621.35                 640.60               564.15                 606.52

I У меня есть набор переменных, которые начинаются с "session1" или "session2".

Второй набор данных: В другом файле CSV у меня есть база данных, которая сообщает мне, был ли участник в условие SHAM или в состоянии REAL.

df2 <- structure(list(ID = 1:4, session1 = c("SHAM","REAL","SHAM","SHAM"), 
session2 = c("REAL","SHAM","REAL","REAL")), row.names = c(NA, 
4L), class = "data.frame")

>df2
  ID session1 session2
1  1     SHAM     REAL
2  2     REAL     SHAM
3  3     SHAM     REAL
4  4     SHAM     REAL

Чего я хочу достичь: Я хочу переименовать столбцы (или создать новые?) и правильно подогнать данные. Так что в основном я думаю, что это будет состоять из ремикса данных, переходя от структуры session1 / session2 к структуре REAL / SHAM. Пример: если участник 1 находился в REAL в session1, то все данные столбцов session1 go переименовываются в REAL_nameofvariable column.

Пример результата, которого я хотел бы достичь:

  ID SHAM_Con_rt_mean SHAM_Incon_rt_mean REAL_Con_rt_mean REAL_Incon_rt_mean
1  1           537.34             646.83           565.42             647.53
2  2           547.23             660.68           541.90             689.40

Вопрос: Как я могу эффективно это кодировать?

PS: пожалуйста, задавайте любые вопросы, если я неясен.

1 Ответ

1 голос
/ 28 января 2020

Возможно, вы могли бы привести в порядок данные и объединить две таблицы данных, чтобы отменить привязку субъектов.

Чтобы привести в порядок данные, рассмотрите возможность преобразования ваших переменных из широких в длинные.

Затем вы можете объединить две таблицы на основе идентификационного номера и session.

library(tidyverse)

tidy_main_data <- main_data %>%
  pivot_longer(cols = -ID, names_to = c("session", ".value"), names_pattern = "(\\d)_(\\w+)")

tidy_blinding_table <- blinding_table %>%
  pivot_longer(cols = -ID, names_to = "session", names_pattern = "(\\d)")

left_join(tidy_main_data, tidy_blinding_table, by = c("ID", "session"))

Выход

# A tibble: 10 x 5
      ID session Con_rt_mean Incon_rt_mean value
   <int> <chr>         <int>         <int> <fct>
 1     1 1               491           439 SHAM 
 2     1 2               723           455 REAL 
 3     2 1               649           584 REAL 
 4     2 2               344           330 SHAM 
 5     3 1               330           438 REAL 
 6     3 2               271           930 SHAM 
 7     4 1               368           423 SHAM 
 8     4 2               143           536 REAL 
 9     5 1               460           511 REAL 
10     5 2               938           525 SHAM 

Редактировать : И может pivot_wider если вы хотите:

joined_tables <- left_join(tidy_main_data, tidy_blinding_table, by = c("ID", "session"))

joined_tables %>%
  pivot_wider(id_cols = ID, names_from = "value", values_from = c("Con_rt_mean", "Incon_rt_mean"))

# A tibble: 5 x 5
     ID Con_rt_mean_SHAM Con_rt_mean_REAL Incon_rt_mean_SHAM Incon_rt_mean_REAL
  <int>            <int>            <int>              <int>              <int>
1     1              491              723                439                455
2     2              344              649                330                584
3     3              271              330                930                438
4     4              368              143                423                536
5     5              938              460                525                511

Данные

set.seed(10)

main_data <- data.frame(
  ID = 1:5,
  session1_Con_rt_mean = sample(1:1000, 5, replace = T),
  session1_Incon_rt_mean = sample(1:1000, 5, replace = T),
  session2_Con_rt_mean = sample(1:1000, 5, replace = T),
  session2_Incon_rt_mean = sample(1:1000, 5, replace = T)
)

blinding_table <- data.frame(
  ID = 1:5,
  session1 = c("SHAM", "REAL", "REAL", "SHAM", "REAL"),
  session2 = c("REAL", "SHAM", "SHAM", "REAL", "SHAM")
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...