我有一个相关矩阵:
a <- matrix(c(1, .8, .8, .8, 1, .8, .8, .8, 1), 3)
## [,1] [,2] [,3]
## [1,] 1.0 0.8 0.8
## [2,] 0.8 1.0 0.8
## [3,] 0.8 0.8 1.0
Run Code Online (Sandbox Code Playgroud)
我现在想从相关矩阵创建一个协方差矩阵.如何在R中完成?
我试过了:
e1.sd <- 3
e2.sd <- 10
e3.sd <- 3
e.cov <- a * as.matrix(c, e1.sd, e2.sd, e3.sd) %*% t(as.matrix(c(e1.sd, e2.sd, e3.sd)))
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
Error in a * as.matrix(c, e1.sd, e2.sd, e3.sd) %*% t(as.matrix(c(e1.sd, :
non-conformable arrays
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我只是举了一个例子,它产生了四个与该layout功能相结合的图.但是,我无法弄清楚内部矩阵如何layout()连接到这些图的布局.
layout(matrix(c(1, 1, 1,
2, 3, 4,
2, 3, 4), nr=3, byrow=T))
hist(rnorm(25), col="VioletRed")
hist(rnorm(25), col="VioletRed")
hist(rnorm(25), col="VioletRed")
hist(rnorm(25), col="VioletRed")
Run Code Online (Sandbox Code Playgroud) 如何使用dplyr::arrange(dplyr::desc())并传入字符串作为列名?
这是一个示例数据集:
df <- data.frame(a = 1:3, b = 3:1)
Run Code Online (Sandbox Code Playgroud)
有效的例子:
df %>% dplyr::arrange(b)
df %>% dplyr::arrange_("b")
df %>% dplyr::arrange(dplyr::desc(b))
Run Code Online (Sandbox Code Playgroud)
但我似乎无法使用字符串既arrange和desc,这是两个版本,我想,不工作:
df %>% dplyr::arrange(dplyr::desc("b"))
df %>% dplyr::arrange_(dplyr::desc("b"))
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个大型数据框,我想使用dplyr我最近发现的优秀软件包(Wickham).我想过滤掉包含字符的列.这可能吗?
例如,在包中的flights数据集中nycflights13,如何过滤掉具有类的列character?
library(nycflights13)
data(flights)
str(flights)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 336776 obs. of 16 variables:
$ year : int 2013 2013 2013 2013 2013 2013 2013 2013 2013 2013 ...
$ month : int 1 1 1 1 1 1 1 1 1 1 ...
$ day : int 1 1 1 1 1 1 1 1 1 1 ...
$ dep_time : int 517 533 542 544 554 554 555 557 …Run Code Online (Sandbox Code Playgroud) 给定一组正则表达式,是否有一种简单的方法来匹配多个模式,并根据匹配的模式替换匹配的文本?
例如,对于以下数据x,每个元素以数字或字母开头,并以数字或字母结尾.让我们称这些模式num_num(以数字开头,以数字结尾),num_let(以数字开头,以字母结尾)let_num,和let_let.
x <- c('123abc', '78fdsaq', 'aq12111', '1p33', '123', 'pzv')
type <- list(
num_let='^\\d.*[[:alpha:]]$',
num_num='^\\d(.*\\d)?$',
let_num='^[[:alpha:]].*\\d$',
let_let='^[[:alpha:]](.*[[:alpha:]])$'
)
Run Code Online (Sandbox Code Playgroud)
要用它后面的模式名称替换每个字符串,我们可以这样做:
m <- lapply(type, grep, x)
rep(names(type), sapply(m, length))[order(unlist(m))]
## [1] "num_let" "num_let" "let_num" "num_num" "num_num" "let_let"
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?
gsubfn?我知道gsubfn我们可以同时替换不同的比赛,例如:
library(gsubfn)
gsubfn('.*', list('1p33'='foo', '123abc'='bar'), x)
## [1] "bar" "78fdsaq" "aq12111" "foo" "123" "pzv"
Run Code Online (Sandbox Code Playgroud)
但我不确定替换是否可以依赖于匹配的模式而不是匹配本身.
stringr?str_replace_all不能很好地使用这个例子,因为迭代地将匹配替换为模式,我们最终会被覆盖的所有内容let_let:
library(stringr)
str_replace_all(x, setNames(names(type), unlist(type)))
## …Run Code Online (Sandbox Code Playgroud) 我编写了一个R函数,gdal_calc.py用于计算RasterStack(一系列输入栅格文件)的像素值最小值.我这样做是因为它比raster::min大型栅格更快.该函数最多可以存储23个文件,但在传递24个或更多文件时会抛出警告,返回填充了零的输出栅格.
由于R只是准备系统调用python gdal_calc.py,这个问题不是R特有的,我鼓励python/numpy aficionados继续阅读.
这是功能.最终gdal_calc调用的结构显示在此帖子底部有问题的用法引发的警告消息中.
gdal_min <- function(infile, outfile, return_raster=FALSE, overwrite=FALSE) {
require(rgdal)
if(return_raster) require(raster)
# infile: The multiband raster file (or a vector of paths to multiple
# raster files) for which to calculate cell minima.
# outfile: Path to raster output file.
# return_raster: (logical) Should the output raster be read back into R?
# overwrite: (logical) Should outfile be overwritten if it exists?
gdal_calc <- Sys.which('gdal_calc.py')
if(gdal_calc=='') …Run Code Online (Sandbox Code Playgroud) 我有raster使用rasterR中的包生成的映射.这些栅格图层可以使用rasterVis包的levelplot函数可视化:
levelplot(rasterstack, layout=c(1, 2),
col.regions=colorRampPalette(c('darkred', 'red3', 'orange2', 'orange',
'yellow', 'lightskyblue', 'steelblue3',
'royalblue3', 'darkblue')))
Run Code Online (Sandbox Code Playgroud)
现在,我想将xy cordinates定义的一些z值添加到levelplot映射中.包含z值的数据帧有4列.第1列和第2列包含x和y坐标,第3列包含布局(1,1)中的地图1的z值和布局(1,2)的第4列.
应该添加每个地图的点数,使得如果z <0.05,pch=2并且如果z> 0.05,则pch=3.
我在网上搜索并找到了Ripley的解决方案,但它在我的情况下不起作用:
levelplot(rcp852, xlab = "", ylab = "",
panel = function(x, y, subscripts, ...) {
panel.levelplot(x, y, subscripts, ...)
panel.xyplot(topo$x,topo$y, cex = 0.5, col = 1)
}
)
Run Code Online (Sandbox Code Playgroud)
我尝试了很多其他选项,但这些点与通过生成的地图不一致levelplot.
我正在使用俄语Win 8.1的机器上工作.
安装RStudio时我选择英语作为默认语言,但在处理日期(POSIXt)时,plot()在时间轴上给我一个带有俄文标签的输出.
我该如何解决?我想要英语.
提前致谢!

我正在尝试绘制具有正值和负值的地图.
所有正值都应该是红色,而负值应该是蓝色,零应该是白色,就像这个带有离散颜色的样本图一样
以下是我正在使用的代码:
library (rasterVis)
ras1 <- raster(nrow=10,ncol=10)
set.seed(1)
ras1[] <- rchisq(df=10,n=10*10)
ras2=ras1*(-1)/2
s <- stack(ras1,ras2)
levelplot(s,par.settings=RdBuTheme())
Run Code Online (Sandbox Code Playgroud)
非常感谢您提供可以应用于其他绘图练习的通用解决方案.
我正在绘制如下图表.我用来生成图例的代码是
legend(4, 20, c("Placebo", "Progabide"), lty=1:2, pch=c(1,16), col=1:2, cex=0.8)
Run Code Online (Sandbox Code Playgroud)

问题是内边距(垂直方向)太大,我想减少它.我想缩小内部边缘的另一种方法是进一步减少"cex".但随后盒子里的文字也会变小.有没有办法减少盒子但不减少其内容.