小编Ale*_*tov的帖子

gsub速度与模式长度

我最近一直在gsub广泛使用,我注意到短模式比长模式运行得更快,这并不奇怪.这是一个完全可重现的代码:

library(microbenchmark)
set.seed(12345)
n = 0
rpt = seq(20, 1461, 20)
msecFF = numeric(length(rpt))
msecFT = numeric(length(rpt))
inp = rep("aaaaaaaaaa",15000)

for (i in rpt) {
  n = n + 1
  print(n)
  patt = paste(rep("a", rpt[n]), collapse = "")
  #time = microbenchmark(func(count[1:10000,12], patt, "b"), times = 10)
  timeFF = microbenchmark(gsub(patt, "b", inp, fixed=F), times = 10)
  msecFF[n] = mean(timeFF$time)/1000000.

  timeFT = microbenchmark(gsub(patt, "b", inp, fixed=T), times = 10)
  msecFT[n] = mean(timeFT$time)/1000000.
}

library(ggplot2)
library(grid)
library(gridExtra)

axis(1,at=seq(0,1000,200),labels=T)

p1 = qplot(rpt, …
Run Code Online (Sandbox Code Playgroud)

regex string r gsub stringi

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

自动填充周日期

我正试图找到一种方法来自动填充任何给定年份的开始/结束周日期.例如2015年4月12日 - 2015年4月18日,2015年4月19日 - 2015年4月25日,2015年4月26日 - 2015年5月2日.我想我可以明确地计算出来,但它不是很优雅.提前致谢!

r date

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

R:在数据框中插入多行(可变数字)

我有一个数据框,比如5行,用于2个可观察对象.我需要在数据框中插入"虚拟"或"零"行,以便每个可观察的行数相同(并且对于更长的行,可以大于N行).例如:

#   This is what I have:
x = c("a","a","b","b","b")
y = c(2,4,5,2,6)
dft = data.frame(x,y)
print(dft)

  x y
1 a 2
2 a 4
3 b 5
4 b 2
5 b 6
Run Code Online (Sandbox Code Playgroud)

这是我想要得到的,即每个可观察到的N行添加到4.模拟 df

x1 = c("a","a","a","a","b","b","b","b")
y1 = c(2,4,0,0,5,2,6,0)
dft1 = data.frame(x1,y1)
print(dft1)

  x1 y1
1  a  2
2  a  4
3  a  0
4  a  0
5  b  5
6  b  2
7  b  6
8  b  0
Run Code Online (Sandbox Code Playgroud)

我开始在每个observable中获取原始数据帧中的N行ddply,以便我知道每个observable需要添加多少行.

library(plyr)
nr = ddply(dft,.(x),summarise,val=length(x))
print(nr) …
Run Code Online (Sandbox Code Playgroud)

r transformation dataframe

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

R - 具有固定精度的write.csv

是否有可能修正数字精度,比如说2位小数write.csv?如果是,.00在这种情况下是否可以存储整数?谢谢!

precision r

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

计算要运行的调用次数(未明确)

我需要计算函数的调用次数并在函数中使用它,但不是显式的.例如:

f <- function(i,ncall) {
 print(paste("call to function number", ncall))
 i = i^2
 return(i)  
}

print(f(3,ncall=1))
print(f(4,ncall=2))
Run Code Online (Sandbox Code Playgroud)

我想这样做,但不提供的ncall=Nf(a,N)每一次.这没有宇宙目的,只是想知道它是否可能.谢谢!

r function

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

R:具有重复的数据帧上的扩展函数

我有一个数据框,我需要转动,但数据框有重复的标识符,所以spread函数给出一个错误Error: Duplicate identifiers for rows (5, 6)

Dimension = c("A","A","B","B","A","A")   
Date = c("Mon","Tue","Mon","Wed","Fri","Fri")    
Metric = c(23,25,7,9,7,8)
df = data.frame(Dimension,Date,Metric)
df

  Dimension Date Metric
1         A  Mon     23
2         A  Tue     25
3         B  Mon      7
4         B  Wed      9
5         A  Fri      7
6         A  Fri      8

library(tidyr)
df1 = spread(df, Date, Metric, fill = " ")

Error: Duplicate identifiers for rows (5, 6)
Run Code Online (Sandbox Code Playgroud)

然后我合并了行并粘贴了Metric:

dfa = aggregate(df[3], df[-3], 
                FUN = function(X) paste(unique(X), collapse=", ")) …
Run Code Online (Sandbox Code Playgroud)

aggregate r spread dplyr tidyr

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

R:agrep与矢量模式

我有一个模式向量,需要使用agrep它们.问题是,agrep似乎一次只能采用一种模式.

patt <- c("test","10 Barrel")
lut  <- c("1 Barrel","10 Barrel Brewing","Harpoon 100 Barrel Series","resr","rest","tesr")

for (i in 1:length(patt)) {
  print(agrep(patt[i],lut,max=1,v=T))
}
Run Code Online (Sandbox Code Playgroud)

结果:

[1] "rest" "tesr"
[1] "1 Barrel"                  "10 Barrel Brewing"         "Harpoon 100 Barrel Series"
Run Code Online (Sandbox Code Playgroud)

for 长模式很慢,因此尝试以矢量化形式:

VecMatch1 = function(string, stringVector){
  stringVector[agrep(string, stringVector, max = 1)]
}
a = VecMatch1(patt,lut)

Warning message:
In agrep(string, stringVector, max = 1) :
  argument 'pattern' has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)

可能是lapply等功能可以帮助吗?谢谢!!

fuzzy-search r agrep

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

检查数据框是否为空的最快方法

检查 a 是否为data.frame空的最快(每微秒都很重要)的方法是什么?我在以下情况下需要它:

if (<df is not empty>) { do something here }
Run Code Online (Sandbox Code Playgroud)

可能的解决方案:

1)if(is.empty(df$V1) == FALSE来自 `spatstat' 包

2) if(nrow(df) != 0)

3) 您的解决方案

我可以做:

library(microbenchmark)
microbenchmark(is.empty(df),times=100)
Unit: microseconds
         expr min  lq mean median  uq max neval
 is.empty(df) 5.8 5.8  6.9      6 6.2  66   100 
Run Code Online (Sandbox Code Playgroud)

但不知道如何计时2)。空 df 的解决方案是什么?

谢谢!

r timing dataframe

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

R:字符串中的缩写状态名称

我有字符串,其中包含州名.我如何有效地缩写它们?我知道state.abb[grep("New York", state.name)]但只有"纽约"是整个字符串才有效.例如,我有"纽约的沃尔玛".提前致谢!

我们假设这个输入:

x = c("Walmart, New York", "Hobby Lobby (California)", "Sold in Sears in Illinois")
Run Code Online (Sandbox Code Playgroud)

编辑:所需的输出将是la"Walmart,NY","Hobby Lobby(CA)","在IL的西尔斯出售".从这里可以看出,状态可以在字符串中以多种方式出现

regex r abbreviation

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

R:具有fixed = T的完全字符串的gsub

我想要gsub完整的字符串 - 我知道我需要使用^$.问题是我在字符串中有特殊字符(可能是[,或者.),所以我需要使用fixed=T.这会覆盖^$.任何解决方案都很受欢 需要将1st,2nd元素替换exact_orig为1st,2nd元素,exact_change但仅限于从头到尾匹配完整字符串.

exact_orig = c("oz","32 oz")
exact_change = c("20 oz","32 ct")

gsub_FixedTrue <- function(i) {
  for(k in seq_along(exact_orig)) i = gsub(exact_orig[k],exact_change[k],i,fixed=TRUE)
  return(i)
}
Run Code Online (Sandbox Code Playgroud)

测试用例:

print(gsub_FixedTrue("32 oz")) #gives me "32 20 oz" - wrong! Must be "32 ct"
print(gsub_FixedTrue("oz oz")) # gives me "20 oz 20 oz" - wrong! Must remain as "oz oz"
Run Code Online (Sandbox Code Playgroud)

我读了一个有点类似的线程,但无法使它适用于完整的字符串(grep在字符串的开头,固定= T在R? …

regex r gsub

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

R:监控矢量化操作的进度

是否可以监控向量化操作的进度R?例如,在循环中总是if (i %% 10000) print(i)可以查看代码当前正在处理哪个元素。我的直觉是“可能不是”,但可能是我错了?

loops r vectorization

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