Я пытаюсь преобразовать фрейм данных в определенный формат. Я использую dplyr, reshape2 и т. Д., Чтобы выполнить это. В принципе, я начинаю с кадра данных следующим образом:Манипуляция кадра данных в R: возможно, с использованием dplyr и reshape2
library(dplyr)
library(plotly)
library(data.table)
library(reshape2)
set.seed(1)
data <- data.frame(ID = paste0("ID",1:10), A = runif(10), B = runif(10), C = runif(10), D = runif(10), E = runif(10), fill = factor(rep("gray", 10), levels = c("gray", palette)))
data$ID <- as.character(data$ID)
Это создает фрейм данных следующего формата.
ID A B C D E fill
1 ID1 0.2655087 0.2059746 0.9347052 0.4820801 0.8209463 gray
2 ID2 0.3721239 0.1765568 0.2121425 0.5995658 0.6470602 gray
3 ID3 0.5728534 0.6870228 0.6516738 0.4935413 0.7829328 gray
4 ID4 0.9082078 0.3841037 0.1255551 0.1862176 0.5530363 gray
5 ID5 0.2016819 0.7698414 0.2672207 0.8273733 0.5297196 gray
6 ID6 0.8983897 0.4976992 0.3861141 0.6684667 0.7893562 gray
Я буду хранить эту «данные» в будущих целях. Но мне нужно, чтобы изменить его, чтобы создать новый фрейм данных (теперь называется «dat_long») следующим образом:
datt <- data.frame(t(data))
names(datt) <- as.matrix(datt[1, ])
datt <- datt[-1, ]
datt[] <- lapply(datt, function(x) type.convert(as.character(x)))
setDT(datt, keep.rownames = TRUE)[]
colnames(datt)[1] <- "x"
dat_long <- melt(datt, id.vars ="x")
Это приводит к следующей структуре:
head(dat_long,12)
x variable value
1: A ID1 0.26550866
2: B ID1 0.2059746
3: C ID1 0.93470523
4: D ID1 0.4820801
5: E ID1 0.8209463
6: fill ID1 gray
7: A ID2 0.37212390
8: B ID2 0.1765568
9: C ID2 0.21214252
10: D ID2 0.5995658
11: E ID2 0.6470602
12: fill ID2 gray
Это почти данные кадр я хочу. Тем не менее, то, что я действительно хочу, показано ниже:
head(dat_long,12)
x variable value fill
1: A ID1 0.26550866 gray
2: B ID1 0.2059746 gray
3: C ID1 0.93470523 gray
4: D ID1 0.4820801 gray
5: E ID1 0.8209463 gray
6: A ID2 0.37212390 gray
7: B ID2 0.1765568 gray
8: C ID2 0.21214252 gray
9: D ID2 0.5995658 gray
10: E ID2 0.6470602 gray
Заполнение не всегда может быть «серым». Но он должен быть одного цвета во всех пяти строках для данной переменной ID (ID1, ID2 и т. Д.).
Что бы вы посоветовали мне для достижения этой цели?
Try с 'melt' и использовать' id.var' как «ID» и 'заполнить', то есть 'библиотека (data.table); расплав (setDT (данные), идентификатор .var = c ("ID", "fill")) [order (ID)] ' – akrun