R 3.1.2/ggplot2_1.0.0/Windows7
如何在分面图中添加带有图例的2条垂直线而不更改线型?在下面的例子中,我无法从我正在编写的代码中看到传说,就像我想象的那样(两条实线和一个合适的图例).一个可重复的例子:
library(ggplot2)
library(plyr)
library(e1071)
set.seed(89)
pm <- data.frame(pm10=rnorm(400, 150, 50), estacion=gl(4,100, labels = c('sur', 'norte', 'este', 'oeste'))) # data
curtosis <- ddply(pm, .(estacion), function(val) sprintf("curtosis==%.2f", kurtosis(val$pm10)))
asimetria <- ddply(pm, .(estacion), function(val) sprintf("asimetría==%.2f", skewness(val$pm10)))
p1 <- ggplot(data=pm, aes(x=pm10, y=..density..)) +
geom_histogram(bin=15, fill='#deebf7', colour='#bdbdbd')+
geom_density(size=1, colour='#cccccc')+
geom_vline(data=aggregate(pm[1], pm[2], quantile, .8), mapping=aes(xintercept=pm10, linetype='percentil .8'), size=1, colour='#dfc27d', show_guide = T)+
geom_vline(data=aggregate(pm[1], pm[2], median), mapping=aes(xintercept=pm10, linetype='mediana'), size=1, colour='#80cdc1', show_guide = T)+
geom_text(data=curtosis, aes(x=350, y=.010, label=V1), size=3, parse=T)+
geom_text(data=asimetria, aes(x=350, y=.008, label=V1), size=3, parse=T)+ …Run Code Online (Sandbox Code Playgroud) 我有一个超过100列和150行的dfrm.我需要将每4列的内容合并为1(最好用"/"分隔,虽然可有可无),这很简单,执行apply(dfrm[ ,1:4], 1, paste, collapse="/").我很难将解决方案扩展到我的整个df.换一种说法:
我怎么能这样做:
loc1 loc1.1 loc1.2 loc1.3 loc2 loc2.1 loc2.2 loc2.3
ind.1 257 262 228 266 204 245 282 132
ind.2 244 115 240 187 196 133 189 251
ind.3 298 139 216 225 219 276 192 254
ind.4 129 176 180 182 215 250 227 186
ind.5 238 217 284 240 131 184 247 168
Run Code Online (Sandbox Code Playgroud)
对于这样的事情:
loc1 loc2
ind.1 257/262/228/266 204/245/282/132
ind.2 244/115/240/187 196/133/189/251
ind.3 298/139/216/225 219/276/192/254
ind.4 129/176/180/182 215/250/227/186
ind.5 238/217/284/240 131/184/247/168
Run Code Online (Sandbox Code Playgroud)
在超过100行和列的数据框中.我已经尝试过对 …
我正在格式化数据集,因此每个条目都具有适用于共显性标记的adegenet格式,例如:
Loci1
###/###
208/210
200/204
198/208
Run Code Online (Sandbox Code Playgroud)
其中#代表任何数字(数字是碱基对中的等位基因大小).我的数据有一些纯合条目(所有3位整数,没有分隔符),其形式为:
Loci1
###
208
198
Run Code Online (Sandbox Code Playgroud)
我打算paste用3位数字串sep='/'来生成第一种格式.我已经尝试使用grep通过查找所有非###/###和使用表匹配否定匹配来对这些纯合条目进行子集化,例如:
a <- grep('\\b\\d{3}?[/]\\d{3}', score$Loci1, value =T ) # Subset all ###/###/
score[!(a %in% 1:nrow(score$Loci1)), ] # works but only on vectors...
Run Code Online (Sandbox Code Playgroud)
在我可以的子集之后paste.当我将其应用于数据框时会出现问题.grep似乎将数据框视为一个列表(部分原因)并返回具有匹配项的列.
简而言之,我怎样才能从数据框中走出###来###/###
自包含的数据示例:
score2 <- NULL
set.seed(9)
Loci1 <- NULL
Loci2 <- NULL
Loci3 <- NULL
for (i in 1:5) Loci1 <- append(Loci1, paste(sample(seq(from = 230, to=330, by=3), 2, replace = F), collapse = …Run Code Online (Sandbox Code Playgroud) 我的数据是以度、分和秒的形式进行纬度和经度投影。这已经以文本形式存储(character-class,忽略row.names)。
> pasaporte\n Latitud Longitud\n4 13\xc2\xb050\xc2\xa852" sur 73\xc2\xb045\xc2\xa812" oeste\n36 13\xc2\xb001\xc2\xa8 sur 75\xc2\xb005\xc2\xa8 oeste\n46 13\xc2\xb009\xc2\xa826" sur 74\xc2\xb013\xc2\xa822" oeste\nRun Code Online (Sandbox Code Playgroud)\n\n通过邮件列表中提供的答案,我已将数据转换为十进制形式......
\n\n> pasaporte\n Latitud Longitud\n4 13.84778 73.75333\n36 13.01667 75.08333\n46 13.15722 74.22278\nRun Code Online (Sandbox Code Playgroud)\n\n之后,我将 转换data.frame为SpatialPoints对象。
xy <- data.frame(cbind(round(pasaporte[, \'Longitud\'], 5), round(pasaporte[, \'Latitud\'], 5))) #Rounded the decimals out of doubt of it interfering later\nxy <- SpatialPoints(coords = xy,\n proj4string = CRS(\'+proj=longlat +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs\'))\nRun Code Online (Sandbox Code Playgroud)\n\n然后继续通过以下方式变换投影spTransform
xy_utm …Run Code Online (Sandbox Code Playgroud)