我想根据@data数据框中的相应属性值从SpatialPolygonsDataFrame对象中删除一些多边形,以便我可以绘制简化/子集化的shapefile.到目前为止,我还没有找到办法做到这一点.
例如,假设我要删除此世界shapefile中面积小于30000的所有多边形.我将如何进行此操作?
或者,同样,我如何删除Antartica?
require(maptools)
getinfo.shape("TM_WORLD_BORDERS_SIMPL-0.3.shp")
# Shapefile type: Polygon, (5), # of Shapes: 246
world.map <- readShapeSpatial("TM_WORLD_BORDERS_SIMPL-0.3.shp")
class(world.map)
# [1] "SpatialPolygonsDataFrame"
# attr(,"package")
# [1] "sp"
head(world.map@data)
# FIPS ISO2 ISO3 UN NAME AREA POP2005 REGION SUBREGION LON LAT
# 0 AC AG ATG 28 Antigua and Barbuda 44 83039 19 29 -61.783 17.078
# 1 AG DZ DZA 12 Algeria 238174 32854159 2 15 2.632 28.163
# 2 AJ AZ AZE 31 Azerbaijan 8260 8352021 142 145 …Run Code Online (Sandbox Code Playgroud) 我最近一直在使用ggplot2来创建一堆等值线.我想知道是否可以使用ggplot2来创建类似于此的地图(来自WorldMapper):

这是一个等角度,其中shapefile多边形被扭曲以表示相对人口数.我相信这被称为制图.他们用一堆其他变量做到这一点.本着Choropleth R Challenge的精神,有谁知道如何使用R?
我现在已经可以在我的Mac OS X 10.6机器上正常工作,这样我就可以创建具有Sweave的漂亮的LaTeX文档,其中包括R代码,输出和LaTeX格式的片段.不幸的是,我觉得我的工作流程有点笨拙且效率低下:
使用TextWrangler,我在一个.Rnw文件中编写LaTeX代码和R代码(由<< >> =上面和@下面的R代码块包围).
保存更改后,我使用Sweave命令从R调用.Rnw文件
Sweave(file="/Users/mymachine/Documents/Assign4.Rnw",
syntax="SweaveSyntaxNoweb")
Run Code Online (Sandbox Code Playgroud)
作为响应,R输出以下消息:
您现在可以在'Assign4.tex'上运行LaTeX
然后我在R目录中找到.tex文件(Assign4.tex)并将其复制到我的文档~/Documents/中.Rnw文件所在的文件夹(将所有内容保存在一个位置).
然后我在TeXShop中打开.tex文件(例如Assign4.tex)并将其编译成pdf格式.只有在这一点上,我才能看到我对文档所做的任何更改,看看它是否"看起来不错".
有没有办法可以通过一键点击编译所有内容? 具体来说,直接从TextWrangler或TeXShop调用Sweave/R会很不错.我怀疑有可能在终端中编写脚本来执行此操作,但我没有使用终端的经验.
如果我能做任何其他事情来简化或改进我的工作流程,请告诉我.
我正在适应一项新工作,我与同事分享的大部分工作都是通过MS Excel进行的.我经常使用数据透视表,因此需要"堆叠"数据,恰好是R melt()中的reshape(reshape2)包中的函数输出,我已经依赖它了.
任何人都可以让我开始使用VBA宏来完成此任务,还是已经存在?
宏的轮廓将是:
换句话说,输出看起来与在R中简单地执行这两行的输出完全相同:
require(reshape)
melt(your.unstacked.dataframe, id.vars = 1:4)
Run Code Online (Sandbox Code Playgroud)
这是一个例子:
# unstacked data
> df1
Year Month Country Sport No_wins No_losses High_score Total_games
2 2010 5 USA Soccer 4 3 5 9
3 2010 6 USA Soccer 5 3 4 8
4 2010 5 CAN Soccer 2 9 7 11
5 2010 6 CAN Soccer 4 8 4 13
6 2009 5 USA Soccer 8 1 4 9
7 2009 6 …Run Code Online (Sandbox Code Playgroud) 我正在尝试有效地实现块引导技术来获得回归系数的分布.主要内容如下.
我有一个面板数据集,并说公司和年份是指数.对于bootstrap的每次迭代,我希望对n个主题进行替换.从这个样本中,我需要构建一个新的数据框,它是rbind()每个采样主题的所有观察的堆栈,运行回归,并拉出系数.重复一堆迭代,比如说100.
我的想法最初是使用split()命令按主题将现有数据框分成列表.从那里,使用
sample(unique(df1$subject),n,replace=TRUE)
Run Code Online (Sandbox Code Playgroud)
获取新列表,然后可能quickdf从plyr包中实现构造新的数据框.
示例慢代码:
require(plm)
data("Grunfeld", package="plm")
firms = unique(Grunfeld$firm)
n = 10
iterations = 100
mybootresults=list()
for(j in 1:iterations){
v = sample(length(firms),n,replace=TRUE)
newdata = NULL
for(i in 1:n){
newdata = rbind(newdata,subset(Grunfeld, firm == v[i]))
}
reg1 = lm(value ~ inv + capital, data = newdata)
mybootresults[[j]] = coefficients(reg1)
}
mybootresults = as.data.frame(t(matrix(unlist(mybootresults),ncol=iterations)))
names(mybootresults) = names(reg1$coefficients)
mybootresults
(Intercept) inv capital
1 373.8591 6.981309 -0.9801547
2 370.6743 6.633642 …Run Code Online (Sandbox Code Playgroud) 我希望做一些看似非常简单的事情.我想在几个不同的短语中使用grepl()命令(或类似的东西)在R中对数据帧进行子集化,而不构造循环.
例如,我想为名为Bob或Mary的人提取所有行:
## example data frame:
tmp = structure(list(Name = structure(c(6L, 8L, 9L, 7L, 2L, 3L, 10L,
1L, 5L, 4L), .Label = c("Alan", "Bob", "bob smith", "Frank",
"John", "Mary Anne", "mary jane", "Mary Smith", "Potter, Mary",
"smith, BOB"), class = "factor"), Age = c(31L, 23L, 23L, 55L,
32L, 36L, 45L, 12L, 43L, 46L), Height = 1:10), .Names = c("Name",
"Age", "Height"), class = "data.frame", row.names = c(NA, -10L
))
tmp
# Name Age Height
#1 Mary Anne 31 1
#2 …Run Code Online (Sandbox Code Playgroud) 我无法理解我之前在stackoverflow上询问的上一个问题的答案:
答案尤其来自user:las3rjock,他建议创建一个"makefile"并运行makefile来自动编译R(Sweave)中的.Rnw然后再编译LaTeX.我不知道makefile是什么,或者如何在Mac OS X上的终端(?)中使用它.我的网络搜索返回了我的知识水平以上的东西.我想我需要一些手来创建并运行一个makefile.
任何人都可以给出关于如何创建一个makefile来运行Sweave/LaTeX的"虚拟"指令,或者更重要的是,在上一个问题中使用las3rjock的答案吗? 谢谢!
我试图将几个表中的一个变量附加在一起(也就是行绑定,连接),以便在Hive中创建一个具有单个列的较长表.我认为这可以UNION ALL基于这个问题(HiveQL UNION ALL)使用,但我不确定这是一种有效的方法吗?
伪代码看起来像这样:
CREATE TABLE tmp_combined AS
SELECT b.var1 FROM tmp_table1 b
UNION ALL
SELECT c.var1 FROM tmp_table2 c
UNION ALL
SELECT d.var1 FROM tmp_table3 d
UNION ALL
SELECT e.var1 FROM tmp_table4 e
UNION ALL
SELECT f.var1 FROM tmp_table5 f
UNION ALL
SELECT g.var1 FROM tmp_table6 g
UNION ALL
SELECT h.var1 FROM tmp_table7 h;
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
关于更复杂的实验设计的混合模型有几个问题和帖子,所以我认为这个更简单的模型将有助于其他初学者以及我.
所以,我的问题是我想从sas proc混合程序中在R中制定重复测量ancova:
proc mixed data=df1;
FitStatistics=akaike
class GROUP person day;
model Y = GROUP X1 / solution alpha=.1 cl;
repeated / type=cs subject=person group=GROUP;
lsmeans GROUP;
run;
Run Code Online (Sandbox Code Playgroud)
以下是使用R(下面)中创建的数据的SAS输出:
. Effect panel Estimate Error DF t Value Pr > |t| Alpha Lower Upper
Intercept -9.8693 251.04 7 -0.04 0.9697 0.1 -485.49 465.75
panel 1 -247.17 112.86 7 -2.19 0.0647 0.1 -460.99 -33.3510
panel 2 0 . . . . . . .
X1 20.4125 10.0228 7 2.04 0.0811 0.1 1.4235 …Run Code Online (Sandbox Code Playgroud) 这些是关于R的统计编程的一些新手问题,我无法在网上找到答案. 我的数据框在下面的代码中标记为"eitc".
1)一旦我加载了数据框,我想查看摘要统计信息.我用过这些功能:
eitc <- read.dta(file="/Users/Documents/eitc.dta")
summary(eitc)
sapply(eitc,mean,na.rm=TRUE) #for sample mean, min, max, etc.
Run Code Online (Sandbox Code Playgroud)
如何在满足某些条件时查找数据框的摘要统计信息.例如,当变量"children"大于或等于1时,我希望看到所有变量的汇总统计信息.等效的Stata代码是:
summarize if children >= 1
Run Code Online (Sandbox Code Playgroud)
2)同样,当满足某些资格时,如何找到特定参数?例如,当"post93"变量等于零且"anykids"变量等于1时,我想找到变量"work"的平均值.等效的Stata代码是:
mean work if post93==0 & anykids==1
Run Code Online (Sandbox Code Playgroud)
3)理想情况下,当我运行上面的汇总统计时,我想知道计算中包含了多少观察值/符合标准.
4)当我读入数据框时,看到数据集中包含多少个观察结果(也许可能有多少行具有缺失值或"NA")也是很好的.
5)另外,我一直在使用以下代码创建虚拟变量.这是正确的方法还是更有效的路线?
post93.dummy <- as.numeric(eitc$year>1993)
eitc=cbind(eitc,post93.dummy)
Run Code Online (Sandbox Code Playgroud) 我正在使用igraphR中的包做一些相当简单的事情:计算网络中两个节点之间的最短距离.是否有一种直接的方法来提取通过计算的路径的距离get.shortest.paths()?
以下是一些可重现的代码,可以解释我的问题:
## reproducible code:
df2 = rbind(c(234,235,21.6),
c(234,326,11.0),
c(235,241,14.5),
c(326,241,8.2),
c(241,245,15.3),
c(234,245,38.46))
df2 = as.data.frame(df2)
names(df2) = c("start_id","end_id","newcost")
require(igraph)
g2 <- graph.data.frame(df2, directed=FALSE)
class(g2)
print(g2, e=TRUE, v=TRUE)
## calculate shortest path between vertex 234 and 245
(tmp2 = get.shortest.paths(g2, from='234', to='245',weights=E(g2)$newcost))
## print route vertices:
V(g2)[tmp2[[1]]]
## print distance of each route segment:
## ??
## calculate distance using 'newcost' weights:
## ?? sum( route segments ) ??
Run Code Online (Sandbox Code Playgroud) 有没有办法为数据框中的特定列分配值?例如,
dat2 = data.frame(c1 = 101:149, VAR1 = 151:200)
j = "dat2[,"VAR1"]" ## or, j = "dat2[,2]"
assign(j,1:50)
Run Code Online (Sandbox Code Playgroud)
上述方法不起作用.这也不是:
j = "dat2"
assign(get(j)[,"VAR1"],1:50)
Run Code Online (Sandbox Code Playgroud) r ×11
latex ×2
sweave ×2
assign ×1
cartogram ×1
dataframe ×1
dijkstra ×1
excel-vba ×1
ggplot2 ×1
grep ×1
hive ×1
hiveql ×1
igraph ×1
mapping ×1
mixed-models ×1
named ×1
osx-leopard ×1
parsing ×1
pivot-table ×1
plyr ×1
r-maptools ×1
regression ×1
reshape2 ×1
routing ×1
sas ×1
spatial ×1
sql ×1
stata ×1
statistics ×1
terminal ×1
textwrangler ×1
vba ×1