#r #stringi #reformatting
#r #stringi #переформатирование
Вопрос:
Я надеялся, что смогу пораскинуть мозгами относительно того, как преобразовать мои данные в длинную форму в R.
Я хотел бы отделить условие, хромофор и детектор источника от имен переменных в моем фрейме данных. Ниже я вставил несколько примеров (но во фрейме данных гораздо больше переменных). Итак, мне нужно выбрать «Angry» и «Happy» и поместить их в переменную «Condition», затем хромофоры Hbo, HbR и Hbt, и, наконец, пары детектора источника «1,1», «1,2» (возможно, поиск и вытягивание текста до и после запятой, потому что у меня есть 49 таких комбинаций).
Примеры имен переменных:
AngryHRFHbO, 1, 1 AngryHRFHbR, 1, 1 AngryHRFHbT, 1, 1 AngryHRFHbO, 2, 1 AngryHRFHbR, 2, 1 AngryHRFHbT, 2, 1 HappyHRFHbO, 4, 1 HappyHRFHbR, 4, 1 HappyHRFHbT, 4, 1 HappyHRFHbO, 4, 1 HappyHRFHbT, 4, 1 HappyHRFHbO, 2, 2 HRFHbR,2,2 Счастливый hrfhbt,2,2
Спасибо за вашу помощь!
Всего наилучшего, Кэролайн
Ответ №1:
Я создал данные, аналогичные вашим данным, описанным выше
library(tidyverse)
library(stringr)
df <- data.frame(obs = 1, "AngryHRFHbO,1,1" = 1, "AngryHRFHbR,1,1" = 0, "AngryHRFHbT,1,1" = 3, "AngryHRFHbO,2,1" = 9, "AngryHRFHbR,2,1" = 0, "HappyHRFHbT,4,1" = 4)
# obs AngryHRFHbO.1.1 AngryHRFHbR.1.1 AngryHRFHbT.1.1 AngryHRFHbO.2.1 AngryHRFHbR.2.1 HappyHRFHbT.4.1
# 1 1 1 0 3 9 0 4
Это подход, который вы можете применить для решения вашего вопроса
df2 <- df %>%
pivot_longer(-obs, names_to = "Name", values_to = "Value") %>%
mutate(Name = str_replace_all(Name, regex("\."), ",")) %>% #you can ignore this line if the variables have the comma
mutate(Condition = str_extract(Name, regex("Angry|Happy")),
Chromophore = str_extract(Name, regex("Hbo|HbR|Hbt", ignore_case = TRUE)),
detector = str_extract(Name, regex("\d[,]\d$"))) %>%
select(-c(obs, Value))
# Name Condition Chromophore detector
# <chr> <chr> <chr> <chr>
# 1 AngryHRFHbO,1,1 Angry HbO 1,1
# 2 AngryHRFHbR,1,1 Angry HbR 1,1
# 3 AngryHRFHbT,1,1 Angry HbT 1,1
# 4 AngryHRFHbO,2,1 Angry HbO 2,1
# 5 AngryHRFHbR,2,1 Angry HbR 2,1
# 6 HappyHRFHbT,4,1 Happy HbT 4,1
Ответ №2:
Спасибо за вашу помощь! Я смог использовать это, чтобы прийти к нужному мне выводу. Смотрите ниже:
df2 <- full_data %>%
pivot_longer(-c("ID", "time"), names_to = "Name", values_to = "Value") %>%
mutate(Name = str_replace_all(Name, regex("\."), "_")) %>% #you can ignore this line
if the variables have the comma
mutate(Condition = str_extract(Name, regex("Angry|Happy|Fearful")),
Chromophore = str_extract(Name, regex("HbO|HbR|HbT", ignore_case = TRUE)),
Channel = str_extract_all(Name, regex("\d [_]\d $"))) %>%
select(c("ID", "time", "Name", "Condition", "Chromophore", "Channel", "Value"))