我好像有下面的代码来绘制这个:
我想要做的是让每个小组的大纲遵循每个小组中的所有要点 - 而不是像目前那样跳过其中的一些.另外我希望每个轮廓都有一个半透明的填充.谢谢你的帮助.
library(ggplot2)
library(reshape)
library(car)
G1 <- 1:10
G2 <- 11:20
G3 <- 21:30
G4 <- 31:35
G5 <- 36:41
sdata <- read.csv("http://dl.dropbox.com/u/58164604/sdata.csv", stringsAsFactors = FALSE)
pdata<-melt(sdata, id.vars="Var")
VarArea <- data.frame(unique(pdata$Var))
VarFinalMin <-c()
for (g in 1:max(VarArea))
{
VarNum<-pdata[which(pdata$Var==g),1:c(ncol(pdata))]
VarN <- g
VarMin <- min(VarNum$value)
VarMinN <- cbind(VarN, VarMin)
VarFinalMin <- rbind(VarFinalMin,VarMinN)
}
VFinalMin <- data.frame(VarFinalMin)
colnames(VFinalMin)<-c("Variable", "Value")
VarFinalMax <-c()
for (g in 1:max(VarArea))
{
VarNum<-pdata[which(pdata$Var==g),1:c(ncol(pdata))]
VarN <- g
VarMax <- max(VarNum$value)
VarMaxN <- cbind(VarN, VarMax)
VarFinalMax <- …
Run Code Online (Sandbox Code Playgroud) 我试图让R在这个网页http://cti.voa.gov.uk/cti/上用预定义的文本(例如BN1 1NA)完成"通过邮政编码搜索"字段,前进到下一页并抓取结果4列表,根据邮政编码,可以在多个页面上.为了使其更复杂,"改进指标"不是文本字段,而是图像文件(如果使用邮政编码BN1 3HP进行搜索,则会看到).我希望此列包含0或1,具体取决于图像是否存在.
最终,我追随一个很好的数据框架,它反映了屏幕上的4列.
我试图修改这个问题的建议去做我上面描述的没有运气的事情,说实话我试图破译这个问题.
我意识到R可能不是最适合我需要做的事情,但这些都是我可以使用的.任何帮助将不胜感激.
我需要将人们随机分配到组和类别中.不幸的是,我真的不知道从哪里开始.我试图用下面的例子来解释我的问题.任何有关这方面的帮助将非常感激.
我有207 '家庭类型A'和408 '家庭类型B'类别.总共有1524人需要被分配到207家庭类型A或408家庭类型B的类别.然而,对于家庭类型A ,1524人也需要组合在2到7组中,或者对于家庭类型B ,需要组合在2到6组中.
最终结果应该是1524人分配到207组(包含2至7人)和408组(包含2至6人).
对组的分配必须是随机的,并且可以使用所需的组大小的任意组合,因为如果不使用组类别则无关紧要(例如,如果归属类型A的207组仅包含2,3,则会没有问题.或一次4人,或另外5人和7人).
我想象一个看起来像这样的输出:
GroupSize <- c(2:7)
Num.Groups <- 0
Num.People <- 0
HouseTypeA <- data.frame(GroupSize, Num.Groups, Num.People)
GroupSize <- c(2:6)
HouseTypeB <- data.frame(GroupSize, Num.Groups, Num.People)
Run Code Online (Sandbox Code Playgroud)
将'Num.Groups'列汇总为207或408,两个数据帧之间的'Num.People'之和为1524.
这是我之前提出的问题的后续问题,但增加了一层额外的复杂性,因此是一个新问题.
我有两组(下面的例子中有39和380).我需要做的是将889人分配到由2至7人组成的39组中,以及由2至6人组成的380组.
但是,对某些组中的人员总数有限制.在下面的示例中,每行允许的最大值在X6列中.
使用以下示例.如果在第2行中,在第X2列分配了6个人,在第X4列分配了120个人,那么总人数将是18(6*3)+240(120*2)= 258,所以这样就可以了.不满324岁.
因此,对于每一行,我所追求的是X1*X2 + X3*X4(使列X5)的值小于或等于X6,其中X2的总和为39,X4的总和为380和总和的X5是889.理想的情况下任何的解决办法是尽可能随机的(所以如果重复你会得到如果可能不同的解决方案),当值是889,39和380不同,将工作和一个.
谢谢!
DF <- data.frame(matrix(0, nrow = 7, ncol = 6))
DF[,1] <- c(2:7,"Sum")
DF[7,2] <- 39
DF[2:6,3] <- 2:6
DF[7,4] <- 380
DF[7,5] <- 889
DF[1:6,6] <- c(359, 324, 134, 31, 5, 2)
DF[1,3:4] <- NA
DF[7,3] <- NA
DF[7,6] <- NA
Run Code Online (Sandbox Code Playgroud)
编辑
我的问题的措辞可能不是最清楚的.以下是我目前使用的代码示例以及它不符合我上面设置的条件
homeType=rep(c("a", "b"), times=c(39, 380))
H <- vector(mode="list", length(homeType))
for(i in seq(H)){
H[[i]]$type <- homeType[i]
H[[i]]$n <- …
Run Code Online (Sandbox Code Playgroud) 我有一个包含 1 亿个点的数据集。我需要在空间上将它们连接到它们相交的区域。我正在使用sf
and st_join
,但毫不奇怪,当我尝试执行此操作时,我的机器内存不足。
为了解决这个问题,我将数据分割成更易于管理的大小,并循环遍历它们以获得我想要的结果。然而,我想看看是否有更聪明的方法来实现我的最终目标(将区域 ID 附加到我的原始数据中)。
require("data.table")
require("dplyr")
require("sf")
DT <- data.table(X=runif(100000000, min=300000, max=500000),
Y=runif(100000000, min=200000, max=400000),
UID = 1:100000000,
Group = rep(1:50, each=100000000/50))
Polygon <- st_read("https://ons-inspire.esriuk.com/arcgis/services/Administrative_Boundaries/Regions_December_2019_Boundaries_EN_BFE/MapServer/WFSServer?request=GetCapabilities&service=WFS") %>%
select(-gml_id) %>%
st_cast(., "GEOMETRYCOLLECTION") %>%
st_collection_extract(., "POLYGON") %>%
group_by(across(1:(ncol(.)-1))) %>%
summarise() %>%
st_cast("MULTIPOLYGON") %>%
ungroup()
DT_Split <- split(DT, by=c("Group"))
DT_Joined <- data.table()
for (i in 1:length(DT_Split)){
DT_Join <- st_join(st_as_sf(DT_Split[[i]], coords = c("X","Y"),crs=27700), Polygon, join = st_intersects)
DT_Split_Join <- DT_Join %>% st_drop_geometry %>% as.data.table
DT_Joined <- rbindlist(list(DT_Joined, DT_Split_Join))
}
Run Code Online (Sandbox Code Playgroud) 我有一个shapefile,我想知道每个多边形有什么其他多边形触摸它.为此,我有这个代码:
require("rgdal")
require("rgeos")
download.file("https://www.dropbox.com/s/vbxx9dic34qwz63/Polygons.zip?dl=1", "Polygons.zip")
Shapefile <- readOGR(".","Polygons")
Touching_List <- gTouches(Shapefile, byid = TRUE, returnDense=FALSE)
Touching_DF <- setNames(stack(lapply(Touching_List, as.character)), c("TOUCHING", "ORIGIN"))
Run Code Online (Sandbox Code Playgroud)
我现在想进一步了解每个多边形触及其他多边形的程度.对于每一行,我所追求的Touching_DF
是每个ORIGIN
多边形的总长度/周长以及每个TOUCHING
多边形接触原点多边形的总长度.然后,这将允许计算共享边界的百分比.我可以想象这将是3个新列的输出Touching_DF
(例如,对于第一行,它可能是原点参数1000m,触摸长度500m,共享边界50%).谢谢.
编辑1
我已将@ StatnMap的答案应用于我的真实数据集.gTouches
如果多边形共享边和点,则看起来返回结果.这些点导致问题,因为它们没有长度.我已经修改了StatnMap的代码部分来处理它,但是当在最后创建数据框时,gTouches返回的共享边/顶点的数量与有多少边有长度之间存在不匹配.
下面是一些使用我的实际数据集示例来演示问题的代码:
library(rgdal)
library(rgeos)
library(sp)
library(raster)
download.file("https://www.dropbox.com/s/hsnrdfthut6klqn/Sample.zip?dl=1", "Sample.zip")
unzip("Sample.zip")
Shapefile <- readOGR(".","Sample")
Touching_List <- gTouches(Shapefile, byid = TRUE, returnDense=FALSE)
# ---- Calculate perimeters of all polygons ----
perimeters <- sp::SpatialLinesLengths(as(Shapefile, "SpatialLines"))
# ---- All in a lapply loop ----
all.length.list <- lapply(1:length(Touching_List), function(from) {
lines <- …
Run Code Online (Sandbox Code Playgroud) 我有这个数据集:
library(data.table)
dt <- data.table(
record=c(1:20),
area=rep(LETTERS[1:4], c(4, 6, 3, 7)),
score=c(1,1:3,2:3,1,1,1,2,2,1,2,1,1,1,1,1:3),
cluster=c("X", "Y", "Z")[c(1,1:3,3,2,1,1:3,1,1:3,3,3,3,1:3)]
)
Run Code Online (Sandbox Code Playgroud)
我已经使用这篇文章中的解决方案来创建此摘要:
dt_summary =
dt[ , .N, keyby = .(area, score, cluster)
][ , {
idx = frank(-N, ties.method = 'min') == 1
NN = sum(N)
.(
cluster_mode = cluster[idx],
cluster_pct = 100*N[idx]/NN,
cluster_freq = N[idx],
record_freq = NN
)
}, by = .(area, score)]
dt_score_1 <- dt_summary[score == 1]
setnames(dt_score_1, "area", "zone")
Run Code Online (Sandbox Code Playgroud)
我想使用结果dt_score_1
来dt
根据区域/区域和集群/集群模式进行过滤。所以在一个新的 data.table 中,从dt
区域 A 中提取的唯一行应该属于集群 X,对于区域 …
我的数据看起来像这样:
require("data.table")
dt1 <- data.table(
code=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
value=c(40,38,55,10,12,16,18,77,87))
Run Code Online (Sandbox Code Playgroud)
我想将其子集化,以便code
保留包含超过或低于给定数字的值的任何group().例如,如果我想要任何包含超过50的值的组,那么结果将如下所示:
dt2 <- data.table(
code=c("A001", "A001","A001","A003","A003"),
value=c(40,38,55,77,87))
Run Code Online (Sandbox Code Playgroud) r ×8
data.table ×3
polygon ×2
subset ×2
filter ×1
ggplot2 ×1
gis ×1
javascript ×1
phantomjs ×1
r-sf ×1
rselenium ×1
shapefile ×1
spatial ×1
web-scraping ×1