小编ric*_*rdo的帖子

从R数据帧清除`Inf`值

在R中,我有一个操作,Inf当我转换数据帧时会创建一些值.

我想将这些Inf值转换为NA值.我的代码对于大数据来说速度慢,有没有更快的方法呢?

说我有以下数据帧:

dat <- data.frame(a=c(1, Inf), b=c(Inf, 3), d=c("a","b"))
Run Code Online (Sandbox Code Playgroud)

以下适用于单个案例:

 dat[,1][is.infinite(dat[,1])] = NA
Run Code Online (Sandbox Code Playgroud)

所以我用以下循环推广它

cf_DFinf2NA <- function(x)
{
    for (i in 1:ncol(x)){
          x[,i][is.infinite(x[,i])] = NA
    }
    return(x)
}
Run Code Online (Sandbox Code Playgroud)

但我不认为这是真正使用R的力量.

r dataframe data.table

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

在字符串中查找字符的位置

我想在字符串中找到一个字符的位置.

说: string = "the2quickbrownfoxeswere2tired"

我希望函数返回424- 2s 的字符位置string.

regex string r

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

为什么plyr这么慢?

我想我正在使用plyr错误.有人可以告诉我这是否是"高效"的plyr代码?

require(plyr)
plyr <- function(dd) ddply(dd, .(price), summarise, ss=sum(volume)) 
Run Code Online (Sandbox Code Playgroud)

一点背景:我有一些大的聚合问题,我注意到他们每个人都花了一些时间.在尝试解决问题时,我开始对R中各种聚合过程的性能感兴趣.

我测试了一些聚合方法 - 并且发现自己整天都在等待.

当我最终得到结果时,我发现了plyr方法和其他方法之间的巨大差距 - 这让我觉得我做错了.

我运行了以下代码(我以为我在查看时会查看新的数据帧包):

require(plyr)
require(data.table)
require(dataframe)
require(rbenchmark)
require(xts)

plyr <- function(dd) ddply(dd, .(price), summarise, ss=sum(volume)) 
t.apply <- function(dd) unlist(tapply(dd$volume, dd$price, sum))
t.apply.x <- function(dd) unlist(tapply(dd[,2], dd[,1], sum))
l.apply <- function(dd) unlist(lapply(split(dd$volume, dd$price), sum))
l.apply.x <- function(dd) unlist(lapply(split(dd[,2], dd[,1]), sum))
b.y <- function(dd) unlist(by(dd$volume, dd$price, sum))
b.y.x <- function(dd) unlist(by(dd[,2], dd[,1], sum))
agg <- function(dd) aggregate(dd$volume, list(dd$price), sum)
agg.x <- function(dd) aggregate(dd[,2], list(dd[,1]), sum)
dtd <- function(dd) …
Run Code Online (Sandbox Code Playgroud)

r plyr dataframe data.table

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

在矩阵中查找最大值的行和列索引

我希望找到矩阵的最大元素值及其位置(矩阵中的行和列id).

我使用以下函数返回矩阵的行和列.

这似乎是一个糟糕的黑客 - 这是我可能错过本机方法的事情.是否有更好/ 更多的R方式?

这是我的功能:

matxMax <- function(mtx)
{
    colmn <- which(mtx == max(mtx)) %/% nrow(mtx) + 1
    row <- which(mtx == max(mtx)) %% nrow(mtx)
    return( matrix(c(row, colmn), 1))
}
Run Code Online (Sandbox Code Playgroud)

我用的如下:

mm <- matrix(rnorm(100), 10, 10)
maxCords <- matxMax(mm)
mm[maxCords]
Run Code Online (Sandbox Code Playgroud)

r matrix

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

将列表元素作为独立对象返回到全局环境中

我有一个列表,并希望将列表的元素分解为全局环境中的单独对象.

例如,我想要列表:

obj <- list(a=1:5, b=2:10, c=-5:5)
Run Code Online (Sandbox Code Playgroud)

是三个单独的对象a,bc.

我尝试用以下方法实现这一点:

lapply(obj, FUN = function(x) names(x)[1] <<- x[1])
Run Code Online (Sandbox Code Playgroud)

但它失败了Error in names(x)[1] <<- x[1] : object 'x' not found.

我怎样才能实现目标?

r environments

31
推荐指数
2
解决办法
3883
查看次数

如何在%运算符之间创建中缀%?

我想有一个中缀操作%between%R-检查,看是否x是下限之间l和上限u.

我创建了以下简单函数 - 但它不是中缀操作.

# between function - check to see if x is between l and u
is.between <- function(x, l, u) { x > l & x < u }
Run Code Online (Sandbox Code Playgroud)

我的目标是用以下代替: x %between% c(l, u)

是否可以定义新的中缀操作?如果是这样,那怎么做呢?

提前致谢

r

21
推荐指数
2
解决办法
5423
查看次数

使用vim缩写时防止尾随空格

我是vim的新用户(在Windows中使用gvim),并且发现缩写节省了很多时间 - 但是如果我能够有时停止尾随空格,它们会更好.

我有一些我经常使用的目录,所以我在我的_vimrc中添加了一些缩写/路径对:

:ab diR1 C:/dirA/dira/dir1/
:ab diR2 C:/dirA/dirb/dir2/ 
Run Code Online (Sandbox Code Playgroud)

等......

现在,当我输入时,diR1 <space>我得到C:/dirA/dira/dir1/[]|了空格所代表的位置[],而光标就是|字符.我想摆脱[]==空白.

这是一个小小的抱怨:但是你似乎能够在Vim中定制其他内容,所以我想我会问 - 当在vim中使用缩写时是否可以避免尾随空格?

在Vim中使用的另一个工具是一个很好的答案 - 我的目标是保存重新键入常用的目录结构,但是让光标很方便,因为我几乎总是会添加一些东西到底,例如myFile.txt.

space在添加myFile.txt到结尾之前我退回的尾随空白区域(无疑由于触发缩写的事实而言)比反复输入整个东西更不烦人,但如果我能避免这样做,那将是理想的. .

vim

12
推荐指数
2
解决办法
3019
查看次数

为什么dplyr这么慢?

像大多数人一样,Hadley Wickham和他所做的事情给我留下了深刻的印象R- 所以我想我会把一些功能转移到他tidyverse身上......这样做我不知道这一切的意义是什么?

我的新dplyr功能比它们的基本等效速度慢得多 - 我希望我做错了什么.我特别喜欢从理解所需的努力中得到一些回报non-standard-evaluation.

那么,我做错了什么?为什么dplyr这么慢?

一个例子:

require(microbenchmark)
require(dplyr)

df <- tibble(
             a = 1:10,
             b = c(1:5, 4:0),
             c = 10:1)

addSpread_base <- function() {
    df[['spread']] <- df[['a']] - df[['b']]
    df
}

addSpread_dplyr <- function() df %>% mutate(spread := a - b)

all.equal(addSpread_base(), addSpread_dplyr())

microbenchmark(addSpread_base(), addSpread_dplyr(), times = 1e4)
Run Code Online (Sandbox Code Playgroud)

时间结果:

Unit: microseconds
              expr     min      lq      mean median      uq       max neval
  addSpread_base()  12.058  15.769  22.07805  24.58  26.435 …
Run Code Online (Sandbox Code Playgroud)

performance r dplyr

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

是否有_fast_方法在data.table中运行滚动回归?

我在R中运行滚动回归,使用存储在a中的数据data.table.

我有一个工作版本,但它感觉就像一个黑客 - 我真的使用我从zoo包中知道的,没有任何魔法data.table...因此,它感觉比它应该慢.

结合约书亚的建议 - 下面 - 通过使用lm.fit而不是使用约12倍的加速lm.

(修订版)示例代码:

require(zoo)
require(data.table)
require(rbenchmark)
set.seed(1)

tt <- seq(as.Date("2011-01-01"), as.Date("2012-01-01"), by="day")
px <- rnorm(366, 95, 1)

DT <- data.table(period=tt, pvec=px)

dtt <- DT[,tnum:=as.numeric(period)][, list(pvec, tnum)]
dtx <- as.matrix(DT[,tnum:=as.numeric(period)][, tnum2:= tnum^2][, int:=1][, list(pvec, int, tnum, tnum2)])

rollreg <- function(dd) coef(lm(pvec ~ tnum + I(tnum^2), data=as.data.frame(dd)))
rollreg.fit <- function(dd) coef(lm.fit(y=dd[,1], x=dd[,-1]))

rr <- function(dd) rollapplyr(dd, width=20, FUN = rollreg, by.column=FALSE)
rr.fit <- …
Run Code Online (Sandbox Code Playgroud)

r zoo data.table

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

在第一个空格之前获取字符

我正在寻找一种grep方法来获取第一个空格之前的字符串中的字符.

我已经破解了以下功能,因为我无法弄清楚如何使用grep类型命令来执行此操作R.

有人可以帮助grep解决方案 - 如果有的话......

beforeSpace <- function(inWords) {
    vapply(inWords, function(L) strsplit(L, "[[:space:]]")[[1]][1], FUN.VALUE = 'character')
}
words <- c("the quick", "brown dogs were", "lazier than quick foxes")
beforeSpace(words)

R>          the quick         brown dogs were lazier than quick foxes 
              "the"                 "brown"                "lazier" 
Run Code Online (Sandbox Code Playgroud)

并且让我知道是否有比grep(或我的功能beforeSpace)更好的方法来做到这一点.

grep substring r

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

标签 统计

r ×9

data.table ×3

dataframe ×2

dplyr ×1

environments ×1

grep ×1

matrix ×1

performance ×1

plyr ×1

regex ×1

string ×1

substring ×1

vim ×1

zoo ×1