2014-11-17 3 views
1

Скажем, у меня есть кадр R данных с 5 столбцов, как показано нижеКак я могу изменить кадр данных, группируя определенные столбцы

time MeanVar1 SdVar1 MedianVar1 MeanVar2 SdVar2 
1 -0.8453978 -1.636985 -0.6239832 -0.4366982 -1.7037374 
2 -0.3000778 -1.034199 0.3292459 -0.6606399 -0.1525361 

Есть отличный способ сделать dataFrame следующим образом:

Var time Mean/Median SD 
1 1 -0.8453978 -1.636985 
1 2 -0.3000778 -1.034199 
1 1 -0.6239832 N/A 
1 2 0.3292459 N/A 
2 1 -0.4366982 -1.7037374 
2 2 -0.6606399 -0.1525361 

или

Var time Mean/Median SD 
MeanVar1 1 -0.8453978 -1.636985 
MeanVar1 2 -0.3000778 -1.034199 
MeanVar1 1 -0.6239832 N/A 
MeanVar1 2 0.3292459 N/A 
MeanVar2 1 -0.4366982 -1.7037374 
MeanVar2 2 -0.6606399 -0.1525361 

Мое общее намерение состоит в том, чтобы построить среднее значение, SD для переменных 1 с errorbars, Медиана variable1 и средние, SD для Переменная 1 в том же сюжете. Следовательно, я чувствую, что, если я изменяю данные в таком формате, я могу просто построить его сразу, а не строить каждую линию отдельно.

С моим ограниченным знанием Решипа и таяния я не мог этого сделать.

EDIT: Добавление дополнительной информации

Пример ввода (С учетом 3 строки, есть 100 строк в общей сложности):

Label trainingSize Accuracy_Mean Accuracy_SD Accuracy_SE Precision_Mean Recall_Mean F1 Accuracy_Median PriorClass0_Mean PriorClass0_SD PriorClass0_SE ProbabilityEstimate_0given0_Mean ProbabilityEstimate_0given0_SD ProbabilityEstimate_0given0_SE ProbabilityEstimate_0given1_Mean ProbabilityEstimate_0given1_SD ProbabilityEstimate_0given1_SE 

0perc_0repeat 0.4 0.5506 0.0531 0.0038 0.6374 0.2336 0.3419 0.5372 0.5278 0.0254 0.0018 0.6433 0.0028 0.0 0.4169 0.003 0.0 
0perc_0repeat 0.4 0.5456 0.0482 0.0034 0.6465 0.2142 0.3218 0.5333 0.5304 0.0248 0.0018 0.6414 0.0028 0.0 0.4193 0.0027 0.0 
0perc_0repeat 0.4 0.5574 0.0555 0.0039 0.6604 0.2197 0.3297 0.5404 0.529 0.0233 0.0016 0.6436 0.003 0.0 0.4163 0.0029 0.0 

Я пытаюсь построить

1) the iteration number(1:100) in X Axis and the points of 5 columns (Accuracy_Mean, Accuracy_Median, PriorClass0_Mean, ProbabilityEstimate_0given0_Mean, ProbabilityEstimate_0given1_Mean in the Y AXIS. 2) distribution (density obtained by 100 points) of 5 columns with error bars (either SD or SE) in a single plot using ggplot.

У меня 4 столбца Precision_Mean, Recall_Mean, F1, Accuracy_Median, не следуя среднему, sd, se pattern!

EDIT1: 1)

dput (droplevels (головка (данные, 3))) структура (список (Ярлык = структура (с (1 л, 1 л, 1 л), .Label = «0perc_0repeat ", class =" factor "), trainingSize = c (0.4, 0.4, 0.4), Accuracy_Mean = c (0.5506, 0.5456, 0.5574), Accuracy_SD = c (0.0531, 0.0482, 0.0555), Accuracy_SE = c (0.0038 , 0,0034, 0,0039), Precision_Mean = c (0,6374, 0,645, 0,6604), Recall_Mean = c (0,2336, 0,2142, 0,2197), F1 = c (0,3419, 0,3218, 0,3297), Accuracy_Median = c (0,5372, 0.5333, 0,5404), PriorClass0_Mean = с (0.5278, 0.5304, 0,529 ), PriorClass0_SD = с (0,0254, 0.0248, 0,0233), PriorClass0_SE = с (0,0018, 0,0018, 0,0016), ProbabilityEstimate_0given0_Mean = C (0.6433, 0.6414, 0.6436), ProbabilityEstimate_0given0_SD = с (0,0028, 0,0028, 0,003), ProbabilityEstimate_0given0_SE = с (0, 0, 0), ProbabilityEstimate_0given1_Mean = с (0,4169, 0.4193, 0,4163), ProbabilityEstimate_0given1_SD = с (0,003, 0,0027, 0,0029), ВероятностьEstimate_0given1_SE = c (0, 0, 0)), .Names = c ("Label", "trainingSize", "Accuracy_Mean", "Accuracy_SD", "Accuracy_SE", "Precision_Mean", "Recall_Mean", "F1" , «Accuracy_Median», «PriorClass0_Mean», «PriorClass0_SD», «PriorCla ss0_SE " "ProbabilityEstimate_0given0_Mean", "ProbabilityEstimate_0given0_SD", "ProbabilityEstimate_0given0_SE", "ProbabilityEstimate_0given1_Mean", "ProbabilityEstimate_0given1_SD", "ProbabilityEstimate_0given1_SE"), row.names = с (NA, 3L), класс =" данных.кадр ")

2) Ожидаемый результат что-то вроде:

Vars Label trainingSize Mean SD SE 

Варс: Среднее, PriorClass0, ProbabilityEstimate_0given0, ProbabilityEstimate_0given1; (медиана, Precision, Напомним, F1 не требуется, или они могут быть пригодны для приведенная выше таблица с SD, SE как N/A или 0).

+0

Также непонятно, почему значения 'NA' должны входить .... – A5C1D2H2I1M1N2O1R2T1

+0

Ваши проблемы являются подлинными. Но любезно прошу вас не переусердствовать, мне просто нужны данные в таком формате. NA приходит, потому что я хочу, чтобы разбивка кадра данных на два столбца (группировка mean и sd), и поскольку Median не имеет соответствующего столбца, поэтому на сегодняшний день мне нужна колонка с N/A или 0. –

ответ

3

merged.stack От моего пакета «splitstackshape» обрабатывается это в определенной степени, получите значения NA, которые вы укажете в своем желаемом выходе).

Тем не менее, это может быть началом решения вашей проблемы, так вот подход:

library(splitstackshape) 
merged.stack(mydf, var.stubs = c("MeanVar|MedianVar", "SdVar"), sep = "var.stubs") 
# time .time_1 MeanVar|MedianVar  SdVar 
# 1: 1  1  -0.8453978 -1.6369850 
# 2: 1  1  -0.6239832 -1.6369850 
# 3: 1  2  -0.4366982 -1.7037374 
# 4: 2  1  -0.3000778 -1.0341990 
# 5: 2  1   0.3292459 -1.0341990 
# 6: 2  2  -0.6606399 -0.1525361 

Если вы действительно хотите, чтобы эти NA значения, возможно, это будет делать трюк:

merged.stack(
    mydf, var.stubs = c("MeanVar|MedianVar", "SdVar"), 
    sep = "var.stubs")[, SdVar := ifelse(
    duplicated(SdVar), NA, SdVar), by = time][] 
# time .time_1 MeanVar|MedianVar  SdVar 
# 1: 1  1  -0.8453978 -1.6369850 
# 2: 1  1  -0.6239832   NA 
# 3: 1  2  -0.4366982 -1.7037374 
# 4: 2  1  -0.3000778 -1.0341990 
# 5: 2  1   0.3292459   NA 
# 6: 2  2  -0.6606399 -0.1525361 
+0

Кажется, что это отличный отправная точка, спасибо! Можете ли вы объяснить, что делает одна строка кода? Я думаю, что имена в VarStubs должны соответствовать именам столбцов в фрейме данных, но не совсем точно, как понять. Я спрашиваю, потому что имена столбцов в кадре данных более сложны, я просто поместил это для простоты (например, MeanVar1 = Accuracy_Mean и MeanVar2 = Parameter_Mean) .... спасибо! –

+1

@PraveenKumar, «var.stubs» должны быть префиксами, которые будут содержать каждую группу переменных. Поскольку это основано на регулярном выражении, мы можем комбинировать группы, используя символ '|'. Таким образом, если бы у нас было что-то вроде «Mean Median», оно соответствует столбцам с «Mean» и «Median» как часть их имен. Переменная «.time_1» создается из того, что осталось после удаления этой части имени столбца. Трудно дать вам более точный ответ без ввода/вывода проб с вашей стороны. – A5C1D2H2I1M1N2O1R2T1

+0

@Ananada Mahto, редактируемый вопрос с точной проблемой и данными, которые я пытаюсь решить. Надеюсь, что это поможет вам дать мне точный ответ. Не уклониться от этого вопроса, но если вы знаете какой-либо другой способ (или форматы данных), с помощью которого я могу получить заговор, это было бы здорово! –

Смежные вопросы