我正在尝试将一些代码转换为包。根据文档,仅.RData文件应位于数据目录中,但我宁愿使用.rds文件,因为它们不保留文件名。有时候,我使用与以后阅读时要使用的名称不同的名称进行保存。而且我真的只想为文件设置一个数据集,因此.RData文件存储更多数据的能力实际上是不利的。
所以我的问题是为什么不允许包数据目录中的.rds文件?还是有解决此问题的另一种方法?
tidyverse 中的 readr 包可以选择自动解压 zip 文件并将其转换为 tibble。但我有一个包含多个 csv 文件的 zip 文件。在下面的代码行中,SSPdataZip 包含三个文件。当我运行它时,我收到一条警告“Zip 中有多个文件...”以及它选择的文件的名称。我知道我想要的名称,但不知道如何告诉 read_csv 它是什么。我缺少一个选项吗?
temp <- readr::read_csv(SSPdataZip, col_names = TRUE, guess_max = 2000)
Run Code Online (Sandbox Code Playgroud) 我有一个脚本生成一个数据表,其中包含一些我希望除以其他列的列,并将结果存储在新列中.这是一个例子.
library(data.table)
dt <- data.table(V1 = c( 5.553465, 4.989168, 2.563682, 6.987971, 19.220936),
V2 = c(4.248335, 19.768138, 3.840026, 17.411003, 17.939368),
V3 = c(9.683953, 15.344424, 11.729091, 7.534210, 5.404000),
V4 = c(5.949093, 4.553023, 9.765656, 11.211069, 4.085964),
V5 = c(11.814671, 5.460138, 2.492230, 1.48792, 8.164280))
list1 <- list(c("V1", "V2", "V3"))
list2 <- list(c("V2", "V4", "V5"))
listRatio <- list(c("rat1","rat2","rat3"))
Run Code Online (Sandbox Code Playgroud)
我尝试了各种方法来将list1元素中的值除以list2元素中的值,但未成功.两个在下面; 既不起作用.
dt[, (listRatio) := list1/list2]
dt[, c("rat1","rat2","rat3") := mapply(dt, function(x,y) x / y, x = c(V1, V2, V3), y = c(V2, V4, V5))]
Run Code Online (Sandbox Code Playgroud) R软件包的版本号如1.97.1。我可以检查版本号
packageVersion("data.table")
Run Code Online (Sandbox Code Playgroud)
在我的计算机上,这将返回1.10.0。
我想做的是检查data.table版本是否比1.9.7更新,因为1.9.7之后的版本具有我的代码需要的功能。我尝试过将版本分为各个组成部分,并以不同的方式对其进行评估,但是我还没有找到任何可靠的方法来执行此操作。任何建议,不胜感激。
我想使用 ggplot 动态更改轴标签。下面的代码是我想要做的事情的简单版本。它在 y 轴上正确显示度数符号。注释掉的 ylab 代码行是我想做的但失败了。我想创建绘图代码,将其分配给一个变量(例如 yLabel),然后让 ggplot 解释它。
library(data.table)
library(ggplot2)
DT <- data.table(timeStamp=c(1:12), ColN1=runif(12, 0, 10))
DT.long <- data.table::melt(
DT, id.vars = c("timeStamp"))
yLabel <- "Temperature~(~degree~F)"
yLabel1 <- expression("Temperature~(~degree~F)")
p <- ggplot(data = DT.long, aes(x = timeStamp, y = value)) +
xlab("Time") +
# ylab( expression(paste("Value is ", yLabel,","))) +
# ylab(yLabel) +
# ylab(yLabel1) +
ylab(Temperature~(~degree~F)) +
scale_y_continuous() +
theme_bw() +
geom_line()
print(p)
Run Code Online (Sandbox Code Playgroud) 我试图解决两个问题:
下面的代码是我试图解决这两个问题的尝试。它解决了第一个问题coord_cartesian,因为条形图超出了图形的顶部。但这并不能解决第二个问题。条形的值位于条形的顶部而不是底部。我认为 vjust = "bottom" 或 0 可以解决问题,但我已经在很多地方尝试过,但都没有成功。
library(ggplot2)
library(data.table)
dt <- data.table(
scenario = c("2010", "SSP2-NoCC", "SSP2-HGEM", "SSP1-NoCC", "SSP3-NoCC", "2010", "SSP2-NoCC", "SSP2-HGEM", "SSP1-NoCC", "SSP3-NoCC", "2010", "SSP2-NoCC", "SSP2-HGEM", "SSP1-NoCC", "SSP3-NoCC", "2010", "SSP2-NoCC", "SSP2-HGEM", "SSP1-NoCC", "SSP3-NoCC"),
value = c(45.75, 15.74, 17.16, 10.73, 24.03, 15.37, 6.87, 7.61, 5.63, 8.87, 9, 3.43, 3.76, 2.93, 4.01, 2.53, 1.79, 1.95, 1.77, 1.79),
region_name = c("Low", "Low", "Low", "Low", "Low", "Lower middle", "Lower middle", "Lower middle", "Lower middle", "Lower middle", "Upper middle", …Run Code Online (Sandbox Code Playgroud) 我想要在数据表中执行看似简单的 mapply 应用程序。我想将一系列数据表列乘以另一列中的值。这是我的功能。y 是与其他列中的值相乘的单列。xIn 是要执行此操作的列名称。
f.xRatio <- function(xIn, y) {return(y * (xIn + 1)/(xIn - 1))}
Run Code Online (Sandbox Code Playgroud)
我有一个数据表,其中有一个名为 GDPratio 的列和一些名称为 x.food1、x.food2 等的列。我将这些列名称放入名为 x 的变量中
x <- paste0("x.", foodNames)
Run Code Online (Sandbox Code Playgroud)
我使用该函数创建的新列的名称创建另一个变量
xRatio <- paste0("xRatio.", foodNames)
Run Code Online (Sandbox Code Playgroud)
以下是我尝试使用 mapply 从函数创建 xRatio 列的两个版本。
dt[, (xRatio) := mapply(FUN = f.xRatio, xIn = .SD, y = GDPRatio), .SDcols = (x)]
dt[, (xRatio) := mapply(FUN = f.xRatio, xIn = .(x), y = GDPRatio)]
Run Code Online (Sandbox Code Playgroud)
两者都不起作用。我认为第一个已经很接近了。我希望有人能够指出我逻辑中的缺陷,而无需我创建可重现的示例。
以下代码以 POSIXct 格式创建一个 10 行数据表,其中包含一个变量 timeStamp。
library(data.table)
dt <- data.table(timeStamp = seq( as.POSIXct("2017-07-01 14:51:50"), by=60, len=10))
Run Code Online (Sandbox Code Playgroud)
我想将时间戳舍入到最近的分钟。
此命令在 timeStamp2 的每一行中放置一个列表,而不是修改后的 POSIXct 变量。
dt[, timestamp2 := round(timeStamp, "mins")]
Run Code Online (Sandbox Code Playgroud)
下面的代码行做了我想要的(在这个例子中四舍五入),但在数据表中不起作用。
timestamp2 <- round(dt$timeStamp, "mins")
Run Code Online (Sandbox Code Playgroud)
我正在使用 data.table 版本 1.10.4-3 和 MRAN R 版本 3.4.1。
我已经从http://luh.umd.edu/data.shtml下载了一些土地利用场景结果的 NetCDF 文件。这个位置的每个文件都有 11 种土地利用类型的值,每年的值从 2015 年到 2100 年。我想制作一个动画 gif 或电影来显示随时间的变化。这看起来应该很简单,但我尝试了多种路线,但都没有奏效,所以我希望有一些真正有效的路线。1. 一种方法涉及使用栅格包中的堆栈或砖函数创建土地利用变量之一的栅格堆栈或砖。然后使用光栅动画功能。不幸的是,我收到以下错误消息“不支持 RasterLayer [堆栈、砖块] 对象的动画”。
包含我目前为此所做的努力的 R 脚本在这里。
我有大约 10 个位置的纬度、经度和数据值。这是我可以轻松为我的问题构建的数据框示例
x <- c("-108.6125","-108.5114","-108.805","-108.4014","-108.5615","-108.8349","-108.225","-108.3139","-108.5568","-108.4968")
y <- c("39.02205","39.22255","39.598","38.89478","39.06429","39.27625","39.03","39.1306","39.14823","38.89795")
z <- c("60.7735","56.45783","49.65","60.15","50","53.95417","50.825","56","55.843","38.73333")
df <- data.frame(x = as.numeric(x),y = as.numeric(y),z = as.numeric(z))
Run Code Online (Sandbox Code Playgroud)
我想根据数据框中的 x、y 和 z 值创建一个 3d 表面。x 和 y 是纬度和经度。z 是经纬度对的值。
我可以做一个 3d 散点图,plot_ly(df, x = ~x, y = ~y, z = ~z) %>% add_markers(color = ~z)但向此代码添加 add_surface 不起作用。
涉及火山 df ( plot_ly() %>% add_surface(x = ~x, y = ~y, z = ~volcano)的绘图 3d 表面示例使用均匀分布的 x 和 y 值,z 是一个二维数组。如果我理解正确,我需要每个位置的 x 和 y 对。
是否可以进行某种操作来创建 add_surface …
下面的 csv 来自一个更长的数据表,称之为temp. 我想将它转换temp.wide为region_codeas 列和region_code(SAS, SSA, EUR, ...)的垂直顺序作为列的顺序。我只是注意到 dcast 按字母顺序排列新列。
scenario region_code region_name value
1: 2010 SAS South Asia 61.17716
2: 2010 SSA Africa south of the Sahara 62.08588
3: 2010 EUR Europe 63.76123
4: 2010 LAC Latin America and Caribbean 68.84806
5: 2010 FSU Former Soviet Union 59.04499
6: 2010 EAP East Asia and Pacific 64.00579
7: 2010 NAM North America 66.18235
8: 2010 MEN Middle East and North Africa …Run Code Online (Sandbox Code Playgroud) 我有一个 DOI 列表,我想将其转换为 BibTeX 记录。bib2doi 包似乎不起作用,所以我使用 R 的curl 包编写了以下代码来扫描列表,创建 bibtex 记录并将其附加到文件中。它对于许多 DOI 都可以正常工作,但(Failed to connect to data.chinadoi.cn port 80: Connection refused)对于 DOI会返回此错误10.11975/j.issn.1002-6819.2017.z1.035。我不知道如何写出错误的 DOI 并继续下去。这是包含三个 DOI 的代码,第二个 DOI 是失败的。
library(curl)
DOIlist <- c("10.1111/1748-5967.12330", "10.11975/j.issn.1002-6819.2017.z1.035", "10.1016/j.envsci.2019.03.017")
h <- new_handle()
handle_setheaders(h, "accept" = "application/x-bibtex")
for (i in 1:length(DOIlist)) {
url <- paste0("https://doi.org/", DOIlist[i])
print(paste0("url: ", url))
curl_download(url, destfile = "curltest.bib", handle = h, mode = "a")
}
Run Code Online (Sandbox Code Playgroud) 我想根据列元素列表更改行顺序.以下是此类列表的示例:
scenChoice <- c("X2010", "SSP2-NoCC-REF", "SSP1-NoCC-REF", "SSP3-NoCC-REF", "SSP2-GFDL-REF", "SSP2-IPSL-REF", "SSP2-HGEM-REF")
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的数据表的输出:
scenario region_code value
SSP1-NoCC-REF lowInc 0.079897553
SSP2-GFDL-REF lowInc 0.119297969
SSP2-HGEM-REF lowInc 0.124730614
SSP2-IPSL-REF lowInc 0.121280208
SSP2-MIROC-REF lowInc 0.121459249
2010 lowInc 0.316646263
SSP2-NoCC-REF lowInc 0.115680977
SSP3-NoCC-REF lowInc 0.167769763
SSP1-NoCC-REF upMidInc 0.020520457
SSP2-GFDL-REF upMidInc 0.024871731
SSP2-HGEM-REF upMidInc 0.026223688
SSP2-IPSL-REF upMidInc 0.025594828
SSP2-MIROC-REF upMidInc 0.025523934
2010 upMidInc 0.063808085
SSP2-NoCC-REF upMidInc 0.023987357
SSP3-NoCC-REF upMidInc 0.027964746
SSP1-NoCC-REF highInc 0.014672749
SSP2-GFDL-REF highInc 0.015258928
SSP2-HGEM-REF highInc 0.016021142
SSP2-IPSL-REF highInc 0.015681295
SSP2-MIROC-REF highInc 0.015602455
2010 highInc 0.020245181 …Run Code Online (Sandbox Code Playgroud)