2015-12-15 104 views
-2

我有一个数据帧像这样:[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 

但是,尽管对这样的许多职位,或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

从要我明白什么是原始数据帧拆分的长格式基于PRR或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,立即重塑。谢谢! –