小编Pet*_*ter的帖子

如何在灵活的迷你吧上叠加值?

我能得到的最接近的 flextable 是这样的:

在此输入图像描述

我想要实现的是这样的 - 用 ggplot2 实现:

在此输入图像描述

有任何想法吗?或者这是一个功能请求?

用于生成弹性表的代码:


library(tibble)
library(flextable)


tib <- tibble(v1 = letters[1:4],
              v2 = c(1, 3, 5, 2))


tib %>% 
  flextable()%>% 
  width(j = 1:2, width = c(0.5, 1.5)) %>% 
  mk_par(j = 2,
         value = as_paragraph(as_chunk(v2, formater = function(x) sprintf("%.0f", x)),
                              " ",
                              minibar(value = v2, max = sum(v2))
                              ),
  part = "body")

Run Code Online (Sandbox Code Playgroud)

r flextable

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

使用 flextable r 包格式化多列

是否可以使用灵活的一行脚本来格式化多列?

该示例包括两种不同类型的双精度变量。我想:

  1. 将大于 1000 的变量舍入到最接近的 1000 并添加千位逗号格式,以及
  2. 舍入变量小于一到两位小数

使用 flextable 这相对简单,但会变成一个包含更大数据集的钻孔。我看不出有什么方法可以更有效地做到这一点。

我可以使用 dplyr 来预处理数据(尽管逗号格式需要将变量类型从 double 更改为 character)。如果可能的话,我更喜欢在 flextable 中做到这一点。我知道 Huxtable 可以进行多列格式化。用户是否可以创建定制的 set_formatter_type 函数?

移动电源

set.seed(100)

tib <- tibble(a = letters[1:4],
              b = runif(4)*sample(c(10000, 1000000, 10000000), 4, replace = TRUE),
              c = runif(4)*sample(c(10000, 1000000, 10000000), 4, replace = TRUE),
              d = runif(4)*sample(c(10000, 1000000, 10000000), 4, replace = TRUE),
              e = runif(4),
              f = runif(4))


  regulartable(tib) %>%
  set_formatter(b = function(x) format(round(x, -3), big.mark = ",")) %>% 
  set_formatter(c = function(x) format(round(x, -3), big.mark …
Run Code Online (Sandbox Code Playgroud)

r flextable

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

使用 knit/markdown 时出错:bkm [块名称] 应该只包含字母数字字符?

不幸的是,我无法生成此错误的代码,因为它是在我的巨大 .rmd 文件中没有更改代码的情况下出现的。

当尝试使用 Markdown 来编织文档时(之前的操作完美无缺),我收到此错误:

错误:bkm [块名称] 只能包含字母数字字符、“:”、“-”和“_”。执行停止

有谁已经知道这个原因,或者 bkm 代表什么,这可以帮助我找到错误的真正原因?

此致

markdown r knitr

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

geom_sf 不使用轴中的几何坐标,但绘制正确的多边形形状?

我的总体目标是将多个形状文件(大河流域内的河流子流域的多边形)组合成一个文件并绘制为地图。这个新的组合文件稍后将与变量数据(例如降雨)组合并按 绘制aes()

我的问题是:
ggplot()+geom_sf()绘制多边形的正确形状,但在轴上没有正确的坐标 - 它不使用轴上几何列中给出的值。

我对错误的想法,但我不知道如何纠正:

  1. 读入的形状文件具有“long”“lat”( crs= 4326) 中的几何形状,但 crs 表示坐标位于 UTM Zone 48N WGS84 ( crs=32648) 中。如果我尝试将 crs 强制为 4326,坐标值会发生变化,就好像转换公式试图纠正它们一样。
  2. geom_sf并且coord_sf正在做一些我不明白的事情!

library(sp)  
library(raster)  
library(ggplot2)  
library(sf)  
library(ggsf)  
library(rgdal)  
library(plyr)   
library(dplyr)    
library(purrr)  

setwd("/Users/.../Sub_Basin_Outlines_withSdata/")  
list.files('/Users/.../Sub_Basin_Outlines_withSdata/', pattern='\\.shp$')
Run Code Online (Sandbox Code Playgroud)

从文件夹中读取各个多边形形状文件。与身份证结合。

bangsai <- st_read("./without_S_data/", "Nam Bang Sai")  
BasinID <- "BGS"  
bangsai <- cbind(bangsai,BasinID)   

ing <- st_read("./without_S_data/", "Nam Ing Outline")  
BasinID <- "ING"  
Run Code Online (Sandbox Code Playgroud)

两个单独的形状文件作为简单特征导入,请参阅 R 代码的图像

将各个子流域多边形形状文件合并为一个具有多个要素的形状文件。

all_sub_basins <- rbind(bangsai,ing)  
Run Code Online (Sandbox Code Playgroud)

图像显示了 中多边形/要素的坐标值all_sub_basins$geometry …

r utm latitude-longitude ggplot2 r-sf

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

访问堆栈溢出 (SO) 问题中的表以用作答案的数据帧

通常,SO 问题包括这样的表格:

"v1"    "v2"    "v3"
"A"     "a"      1
"B"     "b"      2
"C"     "c"      3

# or like so

 v1 v2 v3
 A  a  1
 B  b  2
 C  c  3

Run Code Online (Sandbox Code Playgroud)

而不是像这样的数据框:

df <-  data.frame(v1 = c("A", "B", "C"),
                  v2 = c("a", "b", "c"),
                  v3 = 1:3)
Run Code Online (Sandbox Code Playgroud)

有没有办法从问题中复制和粘贴数据的表格版本并用于在自己的控制台中工作,而无需手动将表格转换为数据框?

r dataframe

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

openxlsx::writeFormula rowwise - 有没有有效的方法来做到这一点?

openxlsx编写公式的函数似乎仅按列添加公式。

有没有一种有效的方法来按行编写公式?

通过一个可重现的示例来说明该问题:

df <- data.frame(a = 1:3,
                 b = 4:6,
                 c = 7:9)

# create workbook, worksheet and write data to worksheet
wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")
writeData(wb, "Sheet 1", x = df)

#  formula to be added rowwise to cells A5:C5
f <- c("SUM(A2:A4)", "SUM(B2:B4)", "SUM(C2:C4)")

# Using the openxlsx function results in columnwise addition of the formula vector: 
writeFormula(wb, sheet = 1, x = f, startCol = 1, startRow = 5)

saveWorkbook(wb, "rowwise_writeFormula.xlsx", overwrite = …
Run Code Online (Sandbox Code Playgroud)

r formula rowwise openxlsx

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

`case_when` 函数中 `~` 后面的条件项

我想在~incase_when函数之后放置一个条件项。我的例子:

df:

df <- structure(list(x = c("a", "a", "a", "b", "b", "b", "c", "c", 
"c", "a", "a", "a"), y = 1:12), class = "data.frame", row.names = c(NA, 
-12L))
Run Code Online (Sandbox Code Playgroud)

不工作的代码:

library(dplyr)
df %>% 
  group_by(x) %>% 
  mutate(y = case_when(x=="b" ~ cumsum(y),
                       TRUE ~ y)) %>% 
  mutate(y = case_when(x=="a" ~ "what I want: last value of group "b" in column y", 
                       TRUE ~ y))
Run Code Online (Sandbox Code Playgroud)

用一句话来说:

  1. group_by x
  2. 计算列中的cumsumby
  3. 取该组 (=b) 的最后一个值 (=15) 和
  4. 将此值 (=15) …

r case-when dplyr tidyverse

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

将一组 jpg 图像合并为一个 jpg/png r

我有一个图像列表,我想将其合并为每组一个图像。每个图像都有一个名称以及它是什么类型的图表。我希望有一种方法可以使用名称对图像进行分组,并为每个组返回单个 jpg 或 png 的输出。组合图像如下所示:

合并的

该文件夹包含具有以下命名结构的图像列表: 在本例中,我希望有 3 个基于 bart、lisa 和 marge 的输出组合 png。

"bart Cum Oil.jpg"
"bart GOR.jpg"
"bart Legend.jpg"
"bart Oil Rate.jpg"
"lisa Cum Oil.jpg"
"lisa GOR.jpg"
"lisa Legend.jpg"
"lisa Oil Rate.jpg"
"marge Cum Oil.jpg"
"marge GOR.jpg"
"marge Legend.jpg"
"marge Oil Rate.jpg"
Run Code Online (Sandbox Code Playgroud)

下面是我要组合的四个图像的示例,因为所有图像的名称中都有“bart”。 巴特暨油 巴特戈尔 巴特传奇 巴特油率

png jpeg r imagemagick

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

保存栅格 - 未更新项目 &gt;= 6

当我收到警告消息时,我在保存栅格时遇到问题In .gd_SetProject(object, ...) : NOT UPDATED FOR PROJ >= 6

我已经在线搜索并从源代码更新了所有相关的软件包,并认为这是 crs 的问题,但是我对 R 相当陌生,无法找出解决方案。

这是我的代码:

# Create a template raster with cells equal in size to DEM
res(DEM)
aggregate <- raster::aggregate
r <- aggregate(DEM, 6)
res(r)

r <- SA %>%
st_transform(crs = 4326)%>%
rasterize(r, field = 1) %>%
# remove any empty cells
trim()

# Save raster:
r <- writeRaster(r, filename = "prediction-surface_SA.tif", overwrite = TRUE)
Warning message:
In .gd_SetProject(object, ...) : NOT UPDATED FOR PROJ >= 6 …
Run Code Online (Sandbox Code Playgroud)

r raster r-raster

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

将不同的函数应用于数据框的列,按名称选择函数

假设我有一个包含多个列的数据框,其中一些我想要转换。列名称定义需要使用什么转换。

library(tidyverse)
set.seed(42)
df <- data.frame(A = 1:100, B = runif(n = 100, 0, 1), log10 = runif(n = 100, 10, 100), log2 = runif(n = 100, 10, 100), log1p = runif(n = 100, 10, 100), sqrt = runif(n = 100, 10, 100))
trans <- list()
trans$log10 <- log10
trans$log2 <- log2
trans$log1p <- log1p
trans$sqrt <- sqrt
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想使用一个across调用,其中列名称与反式函数名称相匹配,并且转换将即时执行。所需的输出如下:

df_trans <- df %>% 
  dplyr::mutate(log10 = trans$log10(log10),
                log2 = trans$log2(log2),
                log1p = trans$log1p(log1p),
                sqrt = trans$sqrt(sqrt))
df_trans
Run Code Online (Sandbox Code Playgroud)

但是,我不想单独手动指定每个转换。在代表性示例中,我只有 4 …

r apply dplyr

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