data1=data.frame("grade"=c(rep(1:3,6)),
"class" = c(rep(c(rep('a',3),rep('b',3)),3)),
"score"=c(rep(c('p','p','p','s','s','s','q','q','q'),2)),
"p"=c(-9:8),
"s"=c(1:18),
"q"=c(21:38))
data2=data.frame("grade"=c(rep(1:3,6)),
"class" = c(rep(rep('a',3),rep('b',3),3)),
"pp"=c(-9,-8,-7,0,1,2),
"ps"=c(1,2,3,10,11,12),
"pq"=c(21,22,23,30,31,32),
"sp"=c(-6,-5,-4,3,4,5),
"ss"=c(4,5,6,13,14,15),
"sq"=c(24,25,26,33,34,35),
"qp"=c(-3,-2,-1,6,7,8),
"qs"=c(7,8,9,16,17,18),
"qq"=c(27,28,29,36,37,38))
У меня есть данные1, и я хочу создать данные2. Мой engli sh не очень хорош, поэтому я сделал эти два примера фреймов данных, чтобы показать, для чего я буду sh. В основном, чтобы объединить 'Score' из 'data1' с именами столбцов 'p' и 'q' и 'q' из data1, чтобы создать 'data2'.
У меня есть большие данные студенческого округа, поэтому wi sh для быстрое решение для data.table, если это возможно. Также интересно увидеть dplyr или другое простое решение!
Тогда мне интересно, как ggplot все столбцы 'data2' [pp-qq] по классу AND 'class'
dcast (setDT ( data1), оценка + класс + rowid (оценка) ~ оценка, значение.var = c ('p', 's', 'q'), sep = "") [, оценка: = NULL] []
Обнадеживающий вывод в два этапа, максимальный w sh - один снизу, один сверху промежуточный -
_____________________________________________________________________________ Один член дал мне очень хороший ответ на изменение кадра данных:
data1=data.frame("grade"=c(rep(1:3,6)),
"class" = c(rep(c(rep('a',3),rep('b',3)),3)),
"score"=c(rep(c('p','p','p','s','s','s','q','q','q'),2)),
"p"=c(-9:8),
"s"=c(1:18),
"q"=c(21:38))
d2=dcast(melt(setDT(data1), id.var = 1:3)[, c('score', 'variable') :=
lapply(.SD, function(x) setNames(c(3, 5, 9), c('p', 's', 'q'))[x]),
.SDcols = c('score', 'variable')],grade + class ~
paste0('x', score, variable), value.var = 'value')
Работает отлично. В моем приложении, однако, у меня есть еще много переменных. Когда я go добавляю только 1, я ломаю его:
data1=data.frame("col1"=c(1),
"grade"=c(rep(1:3,6)),
"class" = c(rep(c(rep('a',3),rep('b',3)),3)),
"score"=c(rep(c('p','p','p','s','s','s','q','q','q'),2)),
"p"=c(-9:8),
"s"=c(1:18),
"q"=c(21:38))
d2=dcast(melt(setDT(data1), id.var = 1:3)[, c('score', 'variable') :=
lapply(.SD, function(x) setNames(c(3, 5, 9), c('p', 's', 'q'))[x]),
.SDcols = c('score', 'variable')], col1 + grade + class ~
paste0('x', score, variable), value.var = 'value')
Ошибка в [.data.table (melt (setDT (data1), id.var = 1: 3), ,: = (c ("оценка",: некоторые элементы .SDcols не являются именами столбцов: [оценка] Дополнительно: предупреждающее сообщение: в melt.data.table (setDT (data1), id.var = 1: 3): «measure.vars» [score, p, s, q] не все одного типа. По порядку иерархии столбец значений расплавленных данных будет иметь тип «символ». Все переменные измерения не имеют тип « персонаж 'тоже будет принужден. Проверьте DETAILS в? melt.data.table для получения дополнительной информации о принуждении.
Может быть, есть способ сделать это с меньшей вероятностью, чтобы сломаться? Ваша помощь очень ценится!