小编J. *_*in.的帖子

如何使用特定变量名保存()

我反复应用一个函数来读取和处理一堆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)

但最后一行返回:

"Error in save(get(this_unique_tag), file = data_tag) : 
  object ‘get(this_unique_tag)’ not found"
Run Code Online (Sandbox Code Playgroud)

即使以下返回数据就好了:

get(this.csv.data$unique_tag)
Run Code Online (Sandbox Code Playgroud)

r

29
推荐指数
3
解决办法
1万
查看次数

如何通过名称临时删除列来获取数据框?

例如,使用数据集 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不解释这种违反直觉的结果.有谁知道这是为什么?

r

22
推荐指数
2
解决办法
9601
查看次数

在特定值的连续运行中创建计数器

我有小时价值.我想计算自上一次非零以来该值连续多少小时.对于电子表格或循环来说,这是一项简单的工作,但我希望有一个快速的矢量化单行程来完成任务.

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)

r

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

使用季节性循环插入时间序列中的缺失值

我有一个时间序列,我想智能地插入缺失值.特定时间的价值受多日趋势以及其在日常周期中的位置的影响.

这是一个缺少第十个观察的例子 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)

interpolation r time-series

14
推荐指数
1
解决办法
1万
查看次数

分为几类:jenks vs kmeans

我想将一个矢量(长度约为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:

  • 在什么情况下kmeans是詹克斯的合理替代品?
  • 通过在数据点的随机1%子集上运行classInt来定义类是否合理?

r intervals

11
推荐指数
1
解决办法
1万
查看次数

当我将其投影到新的CRS(R中的projectRaster函数)时,为什么我的栅格地图的值会发生变化?

我需要将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)

r projection raster

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

在一个因子的水平内返回一个向量的等级的最有效方法是什么,作为一个与原始向量具有相同顺序/长度的向量?

还有一个要求 - 结果向量与原始向量的顺序相同.

我有一个非常基本的功能,可以对矢量进行百分位数,并且按照我希望的方式工作:

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)

r

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

如何读取XML输入文件,操作一些节点(删除并重命名一些)并将输出写入新的XML输出文件?

我需要从互联网上读取一个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和类似功能的专家.

但我的目标是:

  1. 我需要删除一整套关于位置的XML子分支,例如:<location> ... anything </location>.可以有多个具有位置数据的节点.我根本不需要输出中的细节.上面的XML文件始终符合XSD架构.调用根节点<clinical_study>.

  2. 生成的简化文件应写入名为"data-changed.xml"的新XML文件中.

  3. 我还需要重命名并从旧的嵌套位置移动一个分支

    <eligibility> <criteria> <textblock> Inclusion criteria are xyz </textblock/>...

  4. 在新输出("data-changed.xml")中,结构应该表示不同的XML节点并且直接位于根节点下:

    <eligibility_criteria> Inclusion criteria are xyz </eligibility_criteria>

所以我需要:

  • 将XML读入内存
  • 操纵树(在某处修剪)
  • 将一些XML节点移动到一个新的位置并以新的名称和
  • 编写生成的XML输出文件.

任何想法都非常感谢?

另外,如果您了解一个关于R内部XML解析的好(最近的!)教程(或者解决它的书籍章节,请分享参考).(我读过Duncan的小插曲,这些太过于先进(太简洁)).

xml r

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

导入和解析 .eml 文件

我希望有人能给我一些关于在 r 中导入和解析 .eml 文件的建议。我有一个包含大约 1000 个 .eml 文件的文件夹,其中包含文本,其中包括如下所示的条目:

返回路径:< fake.name@stuff.com>

我想做的是将所有这些文件导入到 r 中的 data.frame 或 data.table 中,并将电子邮件地址解析到单独的字段中。
我想我以前见过用文本文件和使用 grep 完成类似的事情。

任何提示将非常感激。

r text-parsing

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

从字符串中删除所有字符除外

我想从字符串中删除所有不是数字,减号或小数点的字符.

我使用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工作表的一部分,但其他人不是).

regex r gdata

3
推荐指数
1
解决办法
710
查看次数

递归ftp下载,然后提取gz文件

我有一个多步文件下载过程,我想在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

3
推荐指数
2
解决办法
6682
查看次数

R正则表达式匹配字符串的开头和结尾,忽略中间

在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)

但是,我不知道如何在两种模式之间进行通配符处理。

regex r

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