小编bah*_*kev的帖子

通过R中的属性对SpatialPolygonsDataFrame(即删除多边形)进行子集化的简单方法

我想根据@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)

mapping r spatial r-maptools

66
推荐指数
4
解决办法
5万
查看次数

R中的Cartogram + choropleth地图

我最近一直在使用ggplot2来创建一堆等值线.我想知道是否可以使用ggplot2来创建类似于此的地图(来自WorldMapper):

在此输入图像描述

这是一个等角度,其中shapefile多边形被扭曲以表示相对人口数.我相信这被称为制图.他们用一堆其他变量做到这一点.本着Choropleth R Challenge的精神,有谁知道如何使用R?

r ggplot2 cartogram

33
推荐指数
1
解决办法
6305
查看次数

更高效的R/Sweave/TeXShop工作流程?

我现在已经可以在我的Mac OS X 10.6机器上正常工作,这样我就可以创建具有Sweave的漂亮的LaTeX文档,其中包括R代码,输出和LaTeX格式的片段.不幸的是,我觉得我的工作流程有点笨拙且效率低下:

  1. 使用TextWrangler,我在一个.Rnw文件中编写LaTeX代码和R代码(由<< >> =上面和@下面的R代码块包围).

  2. 保存更改后,我使用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文件所在的文件夹(将所有内容保存在一个位置).

  3. 然后我在TeXShop中打开.tex文件(例如Assign4.tex)并将其编译成pdf格式.只有在这一点上,我才能看到我对文档所做的任何更改,看看它是否"看起来不错".

有没有办法可以通过一键点击编译所有内容? 具体来说,直接从TextWrangler或TeXShop调用Sweave/R会很不错.我怀疑有可能在终端中编写脚本来执行此操作,但我没有使用终端的经验.

如果我能做任何其他事情来简化或改进我的工作流程,请告诉我.

textwrangler latex r sweave

19
推荐指数
5
解决办法
8695
查看次数

使用VBA融化/重塑excel?

我正在适应一项新工作,我与同事分享的大部分工作都是通过MS Excel进行的.我经常使用数据透视表,因此需要"堆叠"数据,恰好是R melt()中的reshape(reshape2)包中的函数输出,我已经依赖它了.

任何人都可以让我开始使用VBA宏来完成此任务,还是已经存在?

宏的轮廓将是:

  1. 在Excel工作簿中选择一系列单元格.
  2. 开始"融化"宏.
  3. 宏将创建一个提示"输入id列数",您可以在其中输入标识信息列之前的数字.(对于它下面的示例R代码是4).
  4. 在excel文件中创建一个名为"melt"的新工作表,该文件将堆叠数据,并创建一个标题为"variable"的新列,该列等于原始选择中的数据列标题.

换句话说,输出看起来与在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)

vba pivot-table r excel-vba reshape2

16
推荐指数
2
解决办法
9130
查看次数

阻止主题列表中的引导程序

我正在尝试有效地实现块引导技术来获得回归系数的分布.主要内容如下.

我有一个面板数据集,并说公司和年份是指数.对于bootstrap的每次迭代,我希望对n个主题进行替换.从这个样本中,我需要构建一个新的数据框,它是rbind()每个采样主题的所有观察的堆栈,运行回归,并拉出系数.重复一堆迭代,比如说100.

  • 每个公司都可能被多次选中,因此我需要在每个迭代的数据集中多次包含它.
  • 使用循环和子集方法,如下所示,似乎计算繁琐.
  • 请注意,对于我的实际数据帧,n和数字迭代比下面的示例大得多.

我的想法最初是使用split()命令按主题将现有数据框分成列表.从那里,使用

sample(unique(df1$subject),n,replace=TRUE)
Run Code Online (Sandbox Code Playgroud)

获取新列表,然后可能quickdfplyr包中实现构造新的数据框.

示例慢代码:

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)

regression r plyr statistics-bootstrap

11
推荐指数
2
解决办法
6832
查看次数

基于使用grepl()的字符串列表的子集?

我希望做一些看似非常简单的事情.我想在几个不同的短语中使用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)

grep parsing r

10
推荐指数
1
解决办法
1万
查看次数

Makefile for dummies?Mac OS X.

我无法理解我之前在stackoverflow上询问的上一个问题的答案:

更高效的R/Sweave/TeXShop工作流程?

答案尤其来自user:las3rjock,他建议创建一个"makefile"并运行makefile来自动编译R(Sweave)中的.Rnw然后再编译LaTeX.我不知道makefile是什么,或者如何在Mac OS X上的终端(?)中使用它.我的网络搜索返回了我的知识水平以上的东西.我想我需要一些手来创建并运行一个makefile.

任何人都可以给出关于如何创建一个makefile来运行Sweave/LaTeX的"虚拟"指令,或者更重要的是,在上一个问题中使用las3rjock的答案吗? 谢谢!

terminal latex osx-leopard r sweave

7
推荐指数
2
解决办法
9925
查看次数

使用UNION ALL在Hive中组合多个表?

我试图将几个表中的一个变量附加在一起(也就是行绑定,连接),以便在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)

任何帮助表示赞赏!

sql hive hiveql

7
推荐指数
1
解决办法
6万
查看次数

将重复测量混合模型公式从SAS转换为R.

关于更复杂的实验设计的混合模型有几个问题和帖子,所以我认为这个更简单的模型将有助于其他初学者以及我.

所以,我的问题是我想从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 sas mixed-models

6
推荐指数
1
解决办法
5664
查看次数

R语言:如何打印/查看样本子集的摘要统计信息?

这些是关于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)

statistics r stata

5
推荐指数
2
解决办法
2万
查看次数

从get.shortest.paths()中找出路线的距离

我正在使用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)

routing r dijkstra igraph

5
推荐指数
1
解决办法
8790
查看次数

如何在数据帧的特定命名列上使用`assign()`或`get()`?

有没有办法为数据框中的特定列分配值?例如,

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 named dataframe assign

4
推荐指数
2
解决办法
7466
查看次数