小编uli*_*a2_的帖子

在 tidyverse 中使用新名称和旧名称的向量来选择和重命名列

我想选择列并根据我保存在单独数据框中的列的名称重命名它们。

这是原始数据集:

df <- tribble(
  ~year, ~country, ~series1, ~series2, 
  2003, "USA", 8, 5,
  2004, "USA", 9, 6, 
  2005, "USA", 11, 7, 
  2006, "USA", 10, 8
)
Run Code Online (Sandbox Code Playgroud)

我想选择并重命名两列,并且想像这样指定:

specs <- tribble(
  ~old_name, ~new_name, 
  "country", "region",
  "series1", "gdp_growth"
)
Run Code Online (Sandbox Code Playgroud)

我想要这个结果:

expected_df <- tribble(
  ~region, ~gdp_growth,
  "USA", 8, 
  "USA", 9, 
  "USA", 11, 
  "USA", 10
)
Run Code Online (Sandbox Code Playgroud)

这不起作用:

df %>% 
  select(specs$new_name = specs$old_name)
Run Code Online (Sandbox Code Playgroud)

Error: unexpected '=' in: "df %>% select(specs$new_name ="

r dataframe dplyr tidyverse

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

与wordclouds的subplot/facets

我试图以一种令人赏心悦目的方式制作几个wordcloud的子图/方面.

问题:

  1. 我不能让基础R wordcloud正确地组合-outputs
  2. 制作wordclouds ggplot2允许刻面但产生不令人满意的结果(丑陋的定位)

我试过两种方法来创建这些wordcloud-subplots.

1.我创建一个示例数据集(以下这里):

library(dplyr)
library(janeaustenr)
library(tidytext)

df <- austen_books() %>%
  unnest_tokens(word, text) %>% 
  anti_join(stop_words, by = "word") %>%
  group_by(book) %>%
  count(word) %>% 
  top_n(100, n)
Run Code Online (Sandbox Code Playgroud)

2.我的第一次尝试使用wordcloud包和基础R:

library(wordcloud)

par(mfrow = c(2,2))
png("jane_austen_wordclouds.png")

df %>% 
  filter(book == "Sense & Sensibility") %>% 
  with(wordcloud(word, n))

df %>% 
  filter(book == "Pride & Prejudice") %>% 
  with(wordcloud(word, n))

df %>% 
  filter(book == "Mansfield Park") %>% 
  with(wordcloud(word, n))

df %>% 
  filter(book == "Emma") %>% 
  with(wordcloud(word, n))

title( "Jane …
Run Code Online (Sandbox Code Playgroud)

r facet ggplot2 word-cloud

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

根据变量更改单个 geom_ribbon() 的颜色

我想绘制一个geom_ribbon()使带的颜色以变量为条件的位置。

例子:

library(dplyr)
library(ggplot2)

df <- tribble(
  ~year, ~lower, ~upper, ~type,
  2001, 150, 222, "A",
  2002, 53, 64, "A",
  2003, 31, 64, "B",
  2004, 10, 18, "B",
  2005, 30, 49, "B",
  2006, 37, 43, "A",
  2007, 54, 77, "B",
  2008, 58, 89, "A",
  2009, 50, 111, "A",
  2010, 40, 81, "A",
  2011, 49, 63, "A"
)

ggplot(df, aes(x = year)) +
  geom_ribbon(aes(ymin = lower, ymax = upper, fill = type))
Run Code Online (Sandbox Code Playgroud)

这会创建:

在此输入图像描述

这会创建两个单独的波段,但我只想更改一个组合波段的颜色。

r ggplot2

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

不能使用“zoo”包(防火墙后面的 Windows 10)

本周我在我的新工作计算机上重新安装了 R 和我最喜欢的软件包。我可以安装我需要的大部分内容,但是我在安装zoo包时遇到了问题。

安装 install.packages("zoo")最初对我不起作用。不幸的是,我不再有初始错误消息。原因是我设法像这样安装它: install.packages("zoo", dependencies=TRUE, repos='http://cran.rstudio.com/')

加载包

这是我的错误:

> library("zoo")


 Fehler: Paket ‘zoo’ ist für 'arch=x64' nicht installiert

This probably has to do with my machine's 64 bit architecture and the corresponding R installation.

  [1]: http://zoo.r-forge.r-project.org/
Run Code Online (Sandbox Code Playgroud)

细节:

如果我现在输入install.packages("zoo"),我会得到:

Installing package into ‘C:/Users/Me/OneDrive - Company/Documents/R/win-library/4.0’
(as ‘lib’ is unspecified)
versuche URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/zoo_1.8-8.zip'
Content type 'application/zip' length 1094522 bytes (1.0 MB)
downloaded 1.0 MB

package ‘zoo’ successfully unpacked and MD5 sums checked
Warning in install.packages …
Run Code Online (Sandbox Code Playgroud)

firewall r package zoo

5
推荐指数
0
解决办法
163
查看次数

使用 ggplot 的facet_wrap 和自相关图

我想为我的数据的不同子组创建自相关的 ggplot 图。

使用该forecast包,我设法为整个示例生成一个 ggplot 图,如下所示:

library(tidyverse)
library(forecast)

df <- data.frame(val = runif(100),
                key = c(rep('a', 50), key = rep('b', 50)))

ggAcf(df$val) 
Run Code Online (Sandbox Code Playgroud)

其产生:

在此输入图像描述

但现在我正在尝试以下方法来生成方面,但它不起作用:

ggplot(df) +
  ggAcf(aes(val)) +
  facet_wrap(~key) 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

r data-visualization facet ggplot2

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

在R中,删除字符串中除最后一个点外的所有点

我有一个这样的字符串列表:

mystr <- c("16.142.8",          
       "52.135.1",         
       "40.114.4",          
       "83.068.8",         
       "83.456.3",         
       "55.181.5",         
       "76.870.2",         
       "96.910.2",         
       "17.171.9",         
       "49.617.4",         
       "38.176.1",         
       "50.717.7",         
       "19.919.6")
Run Code Online (Sandbox Code Playgroud)

我知道第一个点.只是一个千位分隔符,而第二个是十进制运算符。

我想将字符串转换为数字,因此第一个应该变成16142.8,第二个应该变成52135.1,依此类推。

我怀疑它可能是用正则表达式完成的,但我不确定如何做。有任何想法吗?

regex r

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

按组添加模型预测

我正在按数据集中的组估计回归模型,然后我希望为所有组添加正确的拟合值。

我正在尝试以下操作:

library(dplyr)
library(modelr)

df <- tribble(
  ~year, ~country, ~value,
  2001, "France", 55, 
  2002, "France", 53, 
  2003, "France", 31, 
  2004, "France", 10, 
  2005, "France", 30, 
  2006, "France", 37, 
  2007, "France", 54, 
  2008, "France", 58, 
  2009, "France", 50, 
  2010, "France", 40, 
  2011, "France", 49, 
  2001, "USA", 55,
  2002, "USA", 53,
  2003, "USA", 64,
  2004, "USA", 40,
  2005, "USA", 30,
  2006, "USA", 39,
  2007, "USA", 55,
  2008, "USA", 53,
  2009, "USA", 71,
  2010, "USA", 44,
  2011, "USA", 40
)

rmod <- df …
Run Code Online (Sandbox Code Playgroud)

grouping regression r dplyr modelr

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

尝试使用 bash 脚本抓取页面时出现curl 1020错误

我正在尝试编写一个 bash 脚本来访问 SSRN 上的期刊概述页面

我正在尝试使用curl它,它在其他网页上适用于我,但error code: 1020如果我尝试运行以下代码,它会返回给我:

curl https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1925128
Run Code Online (Sandbox Code Playgroud)

我认为这可能与 URL 中的问号有关,但我让它可以与包含问号的其他页面一起使用。

它可能与页面允许执行的操作有关。不过,我也可以使用 R 的rvest包访问该页面,所以我认为它通常也可以使用 bash 工作。

bash curl web-scraping

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

在自身汇总后加入数据框后,数据框中的列名称奇怪

当我总结一个数据框并将其重新加入原始数据框时,则在使用列名时遇到了麻烦。

这是原始数据框:

import pandas as pd

d = {'col1': ["a", "a", "b", "a", "b", "a"], 'col2': [0, 4, 3, -5, 3, 4]}
df = pd.DataFrame(data=d)
Run Code Online (Sandbox Code Playgroud)

现在,我计算一些统计数据并将其合并回:

group_summary = df.groupby('col1', as_index = False).agg({'col2': ['mean', 'count']})
df = pd.merge(df, group_summary, on = 'col1')
Run Code Online (Sandbox Code Playgroud)

数据框现在具有一些奇怪的列名:

df
Out: 
  col1  col2  (col2, mean)  (col2, count)
0    a     0          0.75              4
1    a     4          0.75              4
2    a    -5          0.75              4
3    a     4          0.75              4
4    b     3          3.00              2
5    b     3          3.00              2 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

从 shapefile 中获取更多聚合形状

如上一个问题所述,我正在绘制德国邮政编码。最精细的级别是 5 位数字,例如 10117。我想绘制在两位数字级别上定义的边界,同时还保持邮政编码的着色粒度。

这里又是我的代码的第一部分,用于对邮政编码进行着色:

# for loading our data
library(raster)
library(readr)
library(readxl)
library(sf)
library(dplyr)

# for datasets
library(maps)
library(spData)

# for plotting
library(grid)
library(tmap)
library(viridis)
Run Code Online (Sandbox Code Playgroud)

获取德国的形状文件(链接)。在德国,邮政编码称为 Postleitzahlen (PLZ)。

germany <- read_sf("data/OSM_PLZ.shp")
Run Code Online (Sandbox Code Playgroud)

将 PLZ 分为任意组以进行绘图。

germany <- germany %>% 
  mutate(plz_groups = case_when(
    substr(plz, 1, 1) == "1" ~ "Group A",
    substr(plz, 2, 2) == "2" ~ "Group B",    
    TRUE ~ "Group X" # rest
  ))
Run Code Online (Sandbox Code Playgroud)

由PLZ进行绘图填充:

tm_shape(germany) +
  tm_fill(col = "plz_groups") 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想划定的界限如下:

在此输入图像描述

我在另一篇文章的答案的基础上设法绘制了德国的国家边界。但为此我使用了不同的形状文件。我还没有找到符合我正在寻找的级别的现有形状文件。

我可以使用已有的粒度 shapefile 并以某种方式聚合到 2 …

mapping r shapefile tmap r-sf

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