2015-12-15 3 views
-2

У меня есть dataframe так:R перекроить широкий для длинных данных

[1] "drugevent" "prr"   "prr_lowerCI" "prr_upperCI" "EBGM"   
[6] "EBG_lowerCI" "EBGM_upperCI" "strata.coded" "strata"  "Reference" 

И я хочу, чтобы сделать сюжет для каждого drugevent, используя ggplot. Для того, чтобы сделать это, мне нужно отформатировать DF следующим образом:

[1] "drug", "event", "measurement"(prr or EBGM), "lowerCI"(for coresponding measurement), upperCI, strata 

Но, несмотря на множество постов на SO, или R учебники я не смог corectly изменить данные. В своей последней попытке я добавил Id так:

mutate(DF, count=1:n()) 

плавится Расширенные данные

melt(DF, id.vars="count") 

Затем я сделал несколько ДФХ Подменю значения интереса

subset(melted, variable in c("prr","EBGM")) 

затем верхний и нижний доверительные интервалы, страты и события с лекарственными средствами, , но когда я объединил их так:

merge(measurement, lowerCI, by="count") 

В конце я имел дублированные значения с 4 строками для каждого счета. Код грязный, и результат неправильный. Не могли бы вы мне помочь?

Редактировать exampples: Исходные данные:

drugevent  prr prr_lowerCI prr_upperCI 
1 CLARITHROMYCIN-Erythema Multiforme 1.3539930 0.1903270 2.517659 
2 CLARITHROMYCIN-Erythema Multiforme 1.7741342 0.6647390 2.883529 
EBGM EBG_lowerCI EBGM_upperCI  strata count 
1 0.9003325 0.2128934  2.772558  Infants  1 
2 1.4471096 0.5997188  3.053965 Children  2 

желаемого результата:

measurement  value  upperCI strata drug 
1   prr 1.353992979 2.51765895 Infants CLARITHROMYCIN 
2   EBGM 0.9009  2.77  Infants CLARITHROMYCIN 
reaction    lowerCI 
1 Erythema Multiforme 2.51765895 
2 Erythema Multiforme 1.447 
+3

включите минимальный тестовый кадр данных и ожидаемое преобразование – jMathew

+0

Первый элемент - это даже не 'data.frame', а вектор. – gregmacfarlane

ответ

0

Из того, что я понимаю, что вы хотите, длинный формат исходного разделения кадра данных на основе ПРР или ebgm

dfPRR <- cbind(df[, !grepl("EBG", colnames(df))], measurement="prr") 
colnames(dfPRR)[2:4] <- c("value", "lowerCI", "upperCI") 
dfEBGM <- cbind(df[, !grepl("prr", colnames(df))], measurement="EBGM") 
colnames(dfEBGM)[2:4] <- c("value", "lowerCI", "upperCI") 
rbind(dfPRR, dfEBGM) 

Используемые данные

structure(list(drugevent = structure(c(1L, 1L), .Label = "CLARITHROMYCIN-Erythema Multiforme", class = "factor"), 
prr = c(1.353993, 1.7741342), prr_lowerCI = c(0.190327, 0.664739 
), prr_upperCI = c(2.517659, 2.883529), EBGM = c(0.9003325, 
1.4471096), EBG_lowerCI = c(0.2128934, 0.5997188), EBGM_upperCI = c(2.772558, 
3.053965), strata = structure(1:2, .Label = c("  Infants", 
" Children"), class = "factor"), count = 1:2), .Names = c("drugevent", 
"prr", "prr_lowerCI", "prr_upperCI", "EBGM", "EBG_lowerCI", "EBGM_upperCI", 
"strata", "count"), class = "data.frame", row.names = c(NA, -2L 
)) 
+0

большое спасибо сэр! Я боролся с этим в течение нескольких дней и написал код, который бы пугал даже игрушку, используя tidyr, dplyr, сразу изменить форму. Благодаря! –

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