我能得到的最接近的 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) 是否可以使用灵活的一行脚本来格式化多列?
该示例包括两种不同类型的双精度变量。我想:
使用 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) 不幸的是,我无法生成此错误的代码,因为它是在我的巨大 .rmd 文件中没有更改代码的情况下出现的。
当尝试使用 Markdown 来编织文档时(之前的操作完美无缺),我收到此错误:
错误:bkm [块名称] 只能包含字母数字字符、“:”、“-”和“_”。执行停止
有谁已经知道这个原因,或者 bkm 代表什么,这可以帮助我找到错误的真正原因?
此致
我的总体目标是将多个形状文件(大河流域内的河流子流域的多边形)组合成一个文件并绘制为地图。这个新的组合文件稍后将与变量数据(例如降雨)组合并按 绘制aes()。
我的问题是:
ggplot()+geom_sf()绘制多边形的正确形状,但在轴上没有正确的坐标 - 它不使用轴上几何列中给出的值。
我对错误的想法,但我不知道如何纠正:
crs= 4326) 中的几何形状,但 crs 表示坐标位于 UTM Zone 48N WGS84 ( crs=32648) 中。如果我尝试将 crs 强制为 4326,坐标值会发生变化,就好像转换公式试图纠正它们一样。 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)
将各个子流域多边形形状文件合并为一个具有多个要素的形状文件。
all_sub_basins <- rbind(bangsai,ing)
Run Code Online (Sandbox Code Playgroud)
该图像显示了 中多边形/要素的坐标值all_sub_basins$geometry …
通常,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)
有没有办法从问题中复制和粘贴数据的表格版本并用于在自己的控制台中工作,而无需手动将表格转换为数据框?
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) 我想在~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)
用一句话来说:
group_by xcumsum组by我有一个图像列表,我想将其合并为每组一个图像。每个图像都有一个名称以及它是什么类型的图表。我希望有一种方法可以使用名称对图像进行分组,并为每个组返回单个 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)
当我收到警告消息时,我在保存栅格时遇到问题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) 假设我有一个包含多个列的数据框,其中一些我想要转换。列名称定义需要使用什么转换。
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 …