Преобразование фрейма данных со значениями столбцов в качестве имен столбцов

#r #casting #dataframe #reshape #melt

#r #Кастинг #фрейм данных #изменить форму #расплавить

Вопрос:

У меня есть фрейм данных, который выглядит следующим образом:

                variable              Name Description value  SMTS
GTEX-N7MS-0007-SM-2D7W1 ENSG00000223972.4     DDX11L1     0 Blood
GTEX-N7MS-0007-SM-2D7W1 ENSG00000227232.4      WASH7P   158 Blood
GTEX-N7MS-0008-SM-4E3JI ENSG00000223972.4     DDX11L1     0  Skin
GTEX-N7MS-0008-SM-4E3JI ENSG00000227232.4      WASH7P   166  Skin
GTEX-N7MS-0011-R10A-SM-2HMJK ENSG00000223972.4     DDX11L1     0 Brain
GTEX-N7MS-0011-R10A-SM-2HMJK ENSG00000227232.4      WASH7P   209 Brain
  

Я хочу преобразовать его так, чтобы значения в Description столбце становились именами столбцов, а значения в value столбце становились значениями столбцов:

                variable   DDX11L1    WASH7P    SMTS
GTEX-N7MS-0007-SM-2D7W1         0       158   Blood
GTEX-N7MS-0008-SM-4E3JI         0       166    Skin
GTEX-N7MS-0011-R10A-SM-2HMJK    0       209   Brain
  

Я пытался использовать приведение (например, dcast(final, value ~ Name) и другие комбинации), но поскольку я не хочу, чтобы какая-либо функция (например, среднее значение, сумма и т. Д.) Применялась для преобразования, Она возвращает мне длину объектов. Я просто хочу, чтобы значения были как есть. Любые предложения будут оценены.

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

1. Проверьте reshape2 пакет и прочитайте это: преобразование данных между широкими и длинными

2. Я этого не понимаю. Каждый раз, когда я задаю вопрос, почему кто-то голосует за него? Я проверил пакет reshape2, а также попробовал cast amp; dcast, используя довольно много комбинаций, но у меня это не работает. Я упоминал, что пытался использовать dcast.

Ответ №1:

Похоже, это дает результаты, которые вы ищете:

 library(reshape2)
dcast(mydf, variable   SMTS ~ Description, value.var="value")
#                       variable  SMTS DDX11L1 WASH7P
# 1      GTEX-N7MS-0007-SM-2D7W1 Blood       0    158
# 2      GTEX-N7MS-0008-SM-4E3JI  Skin       0    166
# 3 GTEX-N7MS-0011-R10A-SM-2HMJK Brain       0    209
  

Ответ №2:

Попробуйте:

 library(dplyr)
library(tidyr)
  

if dat — набор данных

  dat%>% select(-Name) %>% spread(Description, value)
#                          variable  SMTS DDX11L1 WASH7P
# 1      GTEX-N7MS-0007-SM-2D7W1 Blood       0    158
# 2      GTEX-N7MS-0008-SM-4E3JI  Skin       0    166
# 3 GTEX-N7MS-0011-R10A-SM-2HMJK Brain       0    209