小编Ant*_*tti的帖子

如何在 python geopandas choropleth 地图中为子区域应用不同的边框宽度

我正在用 geopandas 制作等值线地图。我想绘制具有两层边界的地图:较薄的边界用于民族国家(geopandas 默认),较厚的边界用于各个经济共同体。这在 geopandas 中可行吗?

这是一个例子:

import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

africa = world.query('continent == "Africa"')

EAC = ["KEN", "RWA", "TZA", "UGA", "BDI"]

africa["EAC"] = np.where(np.isin(africa["iso_a3"], EAC), 1, 0)

africa.plot(column="pop_est")
plt.show()

Run Code Online (Sandbox Code Playgroud)

我为属于 EAC 组的国家/地区创建了一个虚拟变量。我想在该组国家周围画出更粗的边界,同时保留国家边界。

在此输入图像描述

编辑:

我仍然不知道如何在子图中进行这项工作。这是一个例子:

axs = ["ax1", "ax2"]
vars = ["pop_est", "gdp_md_est"]
fig, axs = plt.subplots(ncols=len(axs),
                        figsize=(10, 10),
                        sharex=True,
                        sharey=True,
                        constrained_layout=True)

for ax, var in zip(axs, vars):

    africa.plot(ax=ax,
                column=var,
                edgecolor="black",
                missing_kwds={
                    "color": "lightgrey",
                    "hatch": "///"
                })

    ax.set_title(var) …
Run Code Online (Sandbox Code Playgroud)

python geopandas choropleth

8
推荐指数
1
解决办法
6662
查看次数

R:数值向量的条件求和

我有矢量具有数值.例如:

inVector <- c(2, -10, 5, 34, 7)
Run Code Online (Sandbox Code Playgroud)

我需要对此进行转换,以便在遇到负面元素时,该负面元素与后续元素相加,直到将该元素转为正数的元素:

outVector <- c(2, 0, 0, 29, 7)
Run Code Online (Sandbox Code Playgroud)

负元素将被设为零,以便保留总和.所以元素2和3将为零,第四个元素等于29 = -10 + 5 + 34.我尝试了这样的for循环解决方案:

outVector <- numeric(length = length(inVector))

for(i in 1:length(inVector)) {
   outVector <- inVector
   outVector[i] <- ifelse(outVector[i] < 0, 0, outVector[i])
   outVector[i + 1] <- ifelse(outVector[i] == 0, sum(inVector[i:(i+1)]), outVector[i + 1])
   outVector <- outVector[1:length(inVector)]
   }
Run Code Online (Sandbox Code Playgroud)

但那没用.但是,我最感兴趣的是一个在dplyr管道中工作的解决方案.

loops r

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

如何取消列出 R 嵌套列表中的任意级别?

我有一个具有三个级别的嵌套列表。我需要取消列出中间级别,但我还没有找到一种简单的方法来做到这一点。

例如

df1 <- data.frame(X = sample(100),
                  Y = sample(100))
df2 <- data.frame(X = sample(50),
                  Y = sample(50))
df3 <- data.frame(X = sample(150),
                  Y = sample(150),
                  Z = sample(150)) 
df4 <- data.frame(X = sample(20),
                  Y = sample(20),
                  Z = sample(20))

list1 <- list(A = df1, B = df2)
list2 <- list(A = df3, B = df4)

masterList <- list(list1, list2)
Run Code Online (Sandbox Code Playgroud)

我想要实现的是

newMasterList <- list(A = rbind(df1,df2), B = rbind(df3,df4))
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用两个递归选项 unlist() 但它们没有产生预期的结果:

newMasterListFAIL1 <- lapply(seq_along(masterList), function(x) unlist(masterList[[x]], recursive = F)) …
Run Code Online (Sandbox Code Playgroud)

r dataframe

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

如何在R中创建条件虚拟?

我有一个时间序列数据的数据框,每天观察温度.我需要创建一个虚拟变量,计算每天温度高于5C的阈值.这本身很容易,但存在一个附加条件:计数仅在超过阈值连续十天后开始计数.这是一个示例数据帧:

df <- data.frame(date = seq(365), 
         temp = -30 + 0.65*seq(365) - 0.0018*seq(365)^2 + rnorm(365))
Run Code Online (Sandbox Code Playgroud)

我想我已经完成了,但是我喜欢的循环太多了.这就是我做的:

df$dummyUnconditional <- 0
df$dummyHead <- 0
df$dummyTail <- 0

for(i in 1:nrow(df)){
    if(df$temp[i] > 5){
        df$dummyUnconditional[i] <- 1
    }
}

for(i in 1:(nrow(df)-9)){
    if(sum(df$dummyUnconditional[i:(i+9)]) == 10){
        df$dummyHead[i] <- 1
    }
}

for(i in 9:nrow(df)){
    if(sum(df$dummyUnconditional[(i-9):i]) == 10){
        df$dummyTail[i] <- 1
    }
}

df$dummyConditional <- ifelse(df$dummyHead == 1 | df$dummyTail == 1, 1, 0)
Run Code Online (Sandbox Code Playgroud)

有谁能建议更简单的方法吗?

loops r dataframe

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

循环 R 中的因子级别 - 如何操作两个连续级别

我需要在 R data.frame 中循环因子级别。在循环内部,我需要对包含由这些级别对定义的子集的 data.frames 进行操作。这些对是该因素的两个连续的唯一级别。

这是我尝试过的示例:

require(dplyr)

df <- data.frame(fac = rep(c("A", "B", "C"), 3))

for(i in levels(fac)){

   if(i != levels(fac)[length(levels(fac))]){
      df %>% filter(fac %in% c(i, i + 1))
   }
}
Run Code Online (Sandbox Code Playgroud)

我尝试包含级别i及其后续级别,但显然表达i + 1不会起作用。如何解决这个问题?我是否必须使可变fac数值或有更简洁的解决方案可用?

编辑:输出(对于这个例子)应该是这两个 data.frames:

dfAB <- df %>% filter(fac %in% c("A", "B"))
dfBC <- df %>% filter(fac %in% c("B", "C"))
Run Code Online (Sandbox Code Playgroud)

loops r dataframe dplyr

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

如何使用 Python 的 matplotlib 绘制地图以便将小岛屿国家也包括在内?

我有一个使用 Python 在非洲地图上绘制数据的基本设置matplotlib。不幸的是,geopandas自然地球数据库不包括小岛屿国家,而小岛屿国家也必须包括在内。

我的基本设置是这样的:

import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
africa = world.query('continent == "Africa"')

africa.plot(column="pop_est")
plt.show()
Run Code Online (Sandbox Code Playgroud)

我得到的数字是这样的: 在此输入图像描述

相反,我想要一个类似这样的图形,其中小岛屿国家由可见点整齐地呈现: 在此输入图像描述

(图来源为:https://en.wikipedia.org/wiki/African_Continental_Free_Trade_Area#/media/File :AfricanContinentalFreeTradeArea.svg )

我有两个问题:1)geopandas自然地球数据不包括岛屿国家,2)我不知道如何将其他不可见的岛屿国家绘制为可见点。

我在 R 的 SO 中看到了一些相关问题,但它特别是我所追求的 Python 解决方案。

python matplotlib cartopy geopandas

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

将基准年索引添加到具有多个组的 R 数据框

我有一个包含很少分组变量的年度时间序列数据框,我需要添加一个基于特定年份的索引列。

df <- data.frame(YEAR = c(2000,2001,2002,2000,2001,2002), 
                 GRP = c("A","A","A","B","B","B"),
                 VAL = sample(6))
Run Code Online (Sandbox Code Playgroud)

我想创建一个简单的变量 VAL 索引,即值除以基准年的值,比如 2000:

df$VAL.IND <- df$VAL/df$VAL[df$YEAR == 2000]
Run Code Online (Sandbox Code Playgroud)

这是不对的,因为它不尊重分组变量 GRP。我试过 plyr 但我无法让它工作。

在我的实际问题中,我有几个具有不同时间序列的分组变量,因此我正在寻找一个非常通用的解决方案。

r dataframe

4
推荐指数
1
解决办法
1597
查看次数

根据列中的序列中断对数据帧进行分组?

我有一个data.frame,其中有一列整数值。我需要形成一个分组变量,以标识该列中的序列中断。例如,我可以创建另一列升序整数,每当原始列的值不大于其滞后值时就添加一个。我该怎么做呢?

例如,如果我有一个像这样的data.frame:

df <- data.frame(A = c(1,2,4,6,78,3,56,78,23))
Run Code Online (Sandbox Code Playgroud)

我需要一些方法来产生带有列B的新表:

df$B <- c(1,1,1,1,1,2,2,2,3)
Run Code Online (Sandbox Code Playgroud)

我尝试过例如dplyr

df %>% mutate(B = 1,
              B = case_when(A < lag(A), B + 1))
Run Code Online (Sandbox Code Playgroud)

那不是很正确。

r dplyr

4
推荐指数
1
解决办法
53
查看次数

在R中重命名重复的字符串

我有一个R数据帧,有两列字符串.在其中一列(例如,Column1)中,存在重复值.我需要重新标记该列,以便将重复的字符串重命名为有序后缀,如Column1.new

 Column1   Column2   Column1.new
 1         A         1_1
 1         B         1_2
 2         C         2_1
 2         D         2_2
 3         E         3
 4         F         4
Run Code Online (Sandbox Code Playgroud)

任何有关如何做到这一点的想法将不胜感激.

干杯,

安蒂

r rename duplicates

3
推荐指数
2
解决办法
2476
查看次数

在R中乘以两组向量

假设我有两个矩阵A和B:

 A:      A1    A2        B:      B1   B2
   ROW1  V1    V2          ROW1  V3   V4
   ROW2  V5    V6          ROW2  V7   V8
Run Code Online (Sandbox Code Playgroud)

我想得到一个结果矩阵R,它包括两个矩阵列中每对的乘积,如下所示:

 R:      A1_B1  A1_B2  A2_B1  A2_B2
   ROW1  V1*V3  V1*V4  V2*V3  V2*V4
   ROW2  V5*V7  V5*V8  V6*V7  V6*V8
Run Code Online (Sandbox Code Playgroud)

循环结构可以做,但我想知道是否有更好的选择.

r matrix

3
推荐指数
1
解决办法
118
查看次数

如何在R data.frame中创建组合变量?

我有一个data.frame,它有几个零值的变量.我需要构造一个额外的变量,它将返回每个观察值不为零的变量组合.例如

df <- data.frame(firm = c("firm1", "firm2", "firm3", "firm4", "firm5"),
                 A = c(0, 0, 0, 1, 2),
                 B = c(0, 1, 0, 42, 0),
                 C = c(1, 1, 0, 0, 0))
Run Code Online (Sandbox Code Playgroud)

现在我想生成新变量:

df$varCombination <- c("C", "B-C", NA, "A-B", "A")
Run Code Online (Sandbox Code Playgroud)

我想到了这样的东西,这显然不起作用:

for (i in 1:nrow(df)){
    df$varCombination[i] <- paste(names(df[i,2:ncol(df) & > 0]), collapse = "-")
}
Run Code Online (Sandbox Code Playgroud)

r dataframe

3
推荐指数
2
解决办法
90
查看次数

如何拆分基于R data.frame列的正则表达式条件

我有一个data.frame,我想根据正则表达式将其中一列拆分为两列.更具体地说,字符串在括号中有一个后缀,需要将其提取到它自己的列中.

所以我想从这里得到:

dfInit <- data.frame(VAR = paste0(c(1:10),"(",c("A","B"),")"))
Run Code Online (Sandbox Code Playgroud)

到这里:

dfFinal <- data.frame(VAR1 = c(1:10), VAR2 = c("A","B"))
Run Code Online (Sandbox Code Playgroud)

regex r dataframe

2
推荐指数
1
解决办法
1191
查看次数

在dplyr mutate中对具有特定模式的变量求和

我有一个data.frame有几个变量,我需要根据它们名称中的模式求和.更具体地说,我有总共一个的股票,不包括我需要找到的可能残差.我正在使用dplyr这个.

示例data.frame:

 df <- data.frame(year = c(2000, 2001, 2002),
             aShare = c(.1,.2,.3),
             bShare = c(.3,.4,.5))
Run Code Online (Sandbox Code Playgroud)

我试过用这样的ends_with函数:

tmp <- df %>% mutate(otherShare = 1 - sum(ends_with("Share")))
Run Code Online (Sandbox Code Playgroud)

但它不会产生所需的结果:

TMP <- df %>% mutate(otherShare = 1 - (aShare + bShare))
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

2
推荐指数
1
解决办法
786
查看次数

标签 统计

r ×11

dataframe ×7

dplyr ×3

loops ×3

geopandas ×2

python ×2

cartopy ×1

choropleth ×1

duplicates ×1

matplotlib ×1

matrix ×1

regex ×1

rename ×1