我反复应用一个函数来读取和处理一堆csv文件.每次运行时,该函数都会创建一个数据框(this.csv.data)并使用save()将其写入.RData具有唯一名称的文件.问题是,稍后当我.RData使用这些文件时load(),加载的变量名称不是唯一的,因为每个加载的名称都是this.csv.data....
我想用独特的标签保存它们,以便它们在我出现时正确命名load().我已经创建了以下代码来说明.
this.csv.data = list(data=c(1:9), unique_tag = "some_unique_tag")
assign(this.csv.data$unique_tag,this.csv.data$data)
# I want to save the data,
# with variable name of <unique_tag>,
# at a file named <unique_tag>.dat
saved_file_name <- paste(this.csv.data$unique_tag,"RData",sep=".")
save(get(this.csv.data$unique_tag), saved_file_name)
Run Code Online (Sandbox Code Playgroud)
但最后一行返回:
Run Code Online (Sandbox Code Playgroud)"Error in save(get(this_unique_tag), file = data_tag) : object ‘get(this_unique_tag)’ not found"
即使以下返回数据就好了:
get(this.csv.data$unique_tag)
Run Code Online (Sandbox Code Playgroud) 例如,使用数据集 mtcars
mtcars[ , "cyl"]
Run Code Online (Sandbox Code Playgroud)
和
mtcars[ , 2]
Run Code Online (Sandbox Code Playgroud)
两个都给我相同的专栏.所以,既然我可以得到一切,但第2列是这样的:
mtcars[ , -2]
Run Code Online (Sandbox Code Playgroud)
我不指望这个:
mtcars[ , -"cyl"]
Error in -"cyl" : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)
相反,我能想到的最好的是:
mtcars[ , !colnames(mtcars)=="cyl"]
Run Code Online (Sandbox Code Playgroud)
有更简单的解决方案吗?
编辑:似乎合乎逻辑的是,如果前两种技术有效,那么后两种技术也应该如此.我希望我遗失了一些东西.帮助页面?"["或?subset不解释这种违反直觉的结果.有谁知道这是为什么?
我有小时价值.我想计算自上一次非零以来该值连续多少小时.对于电子表格或循环来说,这是一项简单的工作,但我希望有一个快速的矢量化单行程来完成任务.
x <- c(1, 0, 1, 0, 0, 0, 1, 1, 0, 0)
df <- data.frame(x, zcount = NA)
df$zcount[1] <- ifelse(df$x[1] == 0, 1, 0)
for(i in 2:nrow(df))
df$zcount[i] <- ifelse(df$x[i] == 0, df$zcount[i - 1] + 1, 0)
Run Code Online (Sandbox Code Playgroud)
期望的输出:
R> df
x zcount
1 1 0
2 0 1
3 1 0
4 0 1
5 0 2
6 0 3
7 1 0
8 1 0
9 0 1
10 0 2
Run Code Online (Sandbox Code Playgroud) 我有一个时间序列,我想智能地插入缺失值.特定时间的价值受多日趋势以及其在日常周期中的位置的影响.
这是一个缺少第十个观察的例子 myzoo
start <- as.POSIXct("2010-01-01")
freq <- as.difftime(6, units = "hours")
dayvals <- (1:4)*10
timevals <- c(3, 1, 2, 4)
index <- seq(from = start, by = freq, length.out = 16)
obs <- (rep(dayvals, each = 4) + rep(timevals, times = 4))
myzoo <- zoo(obs, index)
myzoo[10] <- NA
Run Code Online (Sandbox Code Playgroud)
如果我必须实现这个,我会在附近的日子里使用某种近似加权平均值,或者将当天的值添加到适合更大趋势的函数行,但我希望已经存在一些包或函数适用于这种情况?
编辑:稍微修改代码以澄清我的问题.有一些na.*方法可以从最近的邻居进行插值,但在这种情况下,他们无法识别缺失值是当天的最低值.也许解决方案是将数据重新整形为宽格式然后进行插值,但我不想完全忽略同一天的连续值.值得注意的是,diff(myzoo, lag = 4)返回10的向量.该解决方案可能在于一些组合reshape,na.spline以及diff.inv,但我就是想不通.
以下三种方法不起作用:

EDIT2.使用以下代码生成的图像.
myzoo <- zoo(obs, index)
myzoo[10] <- NA # knock out the missing point …Run Code Online (Sandbox Code Playgroud) 我想将一个矢量(长度约为10 ^ 5)分成五个类.使用classIntervals包中的函数classInt我想使用style = "jenks"自然中断,但即使对于只有500的更小的向量,这也需要过多的时间style = "kmeans".设置几乎是瞬间完成的.
library(classInt)
my_n <- 100
set.seed(1)
x <- mapply(rnorm, n = my_n, mean = (1:5) * 5)
system.time(classIntervals(x, n = 5, style = "jenks"))
R> system.time(classIntervals(x, n = 5, style = "jenks"))
user system elapsed
13.46 0.00 13.45
system.time(classIntervals(x, n = 5, style = "kmeans"))
R> system.time(classIntervals(x, n = 5, style = "kmeans"))
user system elapsed
0.02 0.00 0.02
Run Code Online (Sandbox Code Playgroud)
是什么让Jenks算法如此缓慢,是否有更快的方式来运行它?
如果需要,我会将问题的最后两部分移到stats.stackexchange.com:
我需要将latlong中的地图投影到方位角等距投影.
map_proj<-projectRaster(map, crs="+proj=aeqd +lon_0=48+lat_0=18")
Run Code Online (Sandbox Code Playgroud)
在我的原始地图中,我有这些价值观
class : RasterLayer
dimensions : 1713, 2185, 3742905 (nrow, ncol, ncell)
resolution : 0.008335028, 0.00833354 (x, y)
extent : 39.06984, 57.28187, -25.93814, -11.66279 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : /Users/Oritteropus/Desktop/Progetti/maps/mada_rast2
names : mada_rast2
values : 0, 255 (min, max)
unique(map)
[1] 0 1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 24 25 26 27 28
[24] 29 …Run Code Online (Sandbox Code Playgroud) 还有一个要求 - 结果向量与原始向量的顺序相同.
我有一个非常基本的功能,可以对矢量进行百分位数,并且按照我希望的方式工作:
ptile <- function(x) {
p <- (rank(x) - 1)/(length(which(!is.na(x))) - 1)
p[p > 1] <- NA
p
}
data <- c(1, 2, 3, 100, 200, 300)
Run Code Online (Sandbox Code Playgroud)
例如,ptile(data)生成:
[1] 0.0 0.2 0.4 0.6 0.8 1.0
Run Code Online (Sandbox Code Playgroud)
我真正希望能够做的是使用相同的功能(ptile)并让它在一个因素的水平范围内工作.所以假设我有一个"因素"如下:
f <- as.factor(c("a", "a", "b", "a", "b", "b"))
Run Code Online (Sandbox Code Playgroud)
我希望能够将"数据"转换为一个向量,告诉我,对于每个观察,它相应的百分位数相对于同一级别内的其他观察值是什么,如下所示:
0.0 0.5 0.0 1.0 0.5 1.0
Run Code Online (Sandbox Code Playgroud)
在黑暗中拍摄,我试过:
tapply(data,f,ptile)
Run Code Online (Sandbox Code Playgroud)
事实上,它确实成功地进行了排名/百分比,但这样做是因为我不知道哪些观察结果与原始向量中的索引相匹配:
[1] a a b a b b
Levels: a b
> tapply(data,f,ptile)
$a
[1] 0.0 0.5 1.0
$b
[1] 0.0 0.5 …Run Code Online (Sandbox Code Playgroud) 我需要从互联网上读取一个XML文件并重新塑造它.这是我迄今为止的XML文件和代码.
library(XML)
url='http://ClinicalTrials.gov/show/NCT00001400?displayxml=true'
doc = xmlParse(url,useInternalNode=TRUE)
Run Code Online (Sandbox Code Playgroud)
我能够使用XML包中的一些函数(例如,getNodeSet),但我不是专家,并且在互联网上有一些例子,但我自己无法解决这个问题.我也知道一些XPath,但这是4年前,我不是一个关于sapply和类似功能的专家.
但我的目标是:
我需要删除一整套关于位置的XML子分支,例如:<location> ... anything </location>.可以有多个具有位置数据的节点.我根本不需要输出中的细节.上面的XML文件始终符合XSD架构.调用根节点<clinical_study>.
生成的简化文件应写入名为"data-changed.xml"的新XML文件中.
我还需要重命名并从旧的嵌套位置移动一个分支
<eligibility>
<criteria>
<textblock>
Inclusion criteria are xyz
</textblock/>...
在新输出("data-changed.xml")中,结构应该表示不同的XML节点并且直接位于根节点下:
<eligibility_criteria>
Inclusion criteria are xyz
</eligibility_criteria>
所以我需要:
任何想法都非常感谢?
另外,如果您了解一个关于R内部XML解析的好(最近的!)教程(或者解决它的书籍章节,请分享参考).(我读过Duncan的小插曲,这些太过于先进(太简洁)).
我希望有人能给我一些关于在 r 中导入和解析 .eml 文件的建议。我有一个包含大约 1000 个 .eml 文件的文件夹,其中包含文本,其中包括如下所示的条目:
返回路径:< fake.name@stuff.com>
我想做的是将所有这些文件导入到 r 中的 data.frame 或 data.table 中,并将电子邮件地址解析到单独的字段中。
我想我以前见过用文本文件和使用 grep 完成类似的事情。
任何提示将非常感激。
我想从字符串中删除所有不是数字,减号或小数点的字符.
我使用Excel导入数据read.xls,其中包括一些奇怪的字符.我需要将它们转换为数字.我对正则表达式不太熟悉,所以需要一种更简单的方法来执行以下操作:
excel_coords <- c(" 19.53380ݰ", " 20.02591°", "-155.91059°", "-155.8154°")
unwanted <- unique(unlist(strsplit(gsub("[0-9]|\\.|-", "", excel_coords), "")))
clean_coords <- gsub(do.call("paste", args = c(as.list(unwanted), sep="|")),
replacement = "", x = excel_coords)
> clean_coords
[1] "19.53380" "20.02591" "-155.91059" "-155.8154"
Run Code Online (Sandbox Code Playgroud)
奖金如果有人能告诉我为什么这些字符出现在我的一些数据中(学位标志是原始Excel工作表的一部分,但其他人不是).
我有一个多步文件下载过程,我想在R中做.我有中间步骤,但不是第一个和第三个......
# STEP 1 Recursively find all the files at an ftp site
# ftp://prism.oregonstate.edu//pub/prism/pacisl/grids
all_paths <- #### a recursive listing of the ftp path contents??? ####
# STEP 2 Choose all the ones whose filename starts with "hi"
all_files <- sapply(sapply(strsplit(all_paths, "/"), rev), "[", 1)
hawaii_log <- substr(all_files, 1, 2) == "hi"
hi_paths <- all_paths[hawaii_log]
hi_files <- all_files[hawaii_log]
# STEP 3 Download & extract from gz format into a single directory
mapply(download.file, url = hi_paths, destfile = hi_files)
## …Run Code Online (Sandbox Code Playgroud) 在R中,如何创建匹配开始和结束字符串的正则表达式,而忽略两者之间的所有内容?
具体来说,如何从以下字符串中查找以“ ./xl/worksheets”开头并以“ .xml”结尾的字符串?
myfiles <- c("./_rels/.rels", "./xl/_rels/workbook.xml.rels",
"./xl/workbook.xml", "./xl/worksheets/sheet4.xml",
"./xl/worksheets/_rels/sheet1.xml.rels", "./xl/worksheets/sheet2.xml",
"./xl/printerSettings/printerSettings11.bin")
Run Code Online (Sandbox Code Playgroud)
我成功了
grep("^\\./xl/worksheets", myfiles) # returns 4 5 6
grep("\\.xml$", myfiles) # returns 3 4 6
Run Code Online (Sandbox Code Playgroud)
当然,我可以这样做:
which(grepl("^\\./xl/worksheets", myfiles) &
grepl("\\.xml$", myfiles)) # returns 4 6
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何在两种模式之间进行通配符处理。
r ×12
regex ×2
gdata ×1
intervals ×1
projection ×1
raster ×1
text-parsing ×1
time-series ×1
xml ×1