小编Ric*_*rta的帖子

函数`[<-`将_replace_一个元素,但不附加_element_

使用时注意到以下内容'[<-'.我成功地替换了元素,但没有在向量中添加元素.

例:

VarX <- integer()
VarX[1] <- 11
`[<-`(VarX, 2, 22)
VarX
# [1] 11

# Expected the value of VarX to be:  
# [1] 11 22

# Also tried: 
`[<-`(VarX, i=2, value=22)
VarX 
# [1] 11
Run Code Online (Sandbox Code Playgroud)

但是,如果索引中已存在值,则会替换该值.

VarX <- integer()
VarX[1] <- 11
VarX[2] <- 99
VarX
# [1] 11 99
`[<-`(VarX, 2, 22)
VarX
# [1] 11 22
Run Code Online (Sandbox Code Playgroud)

我只是简单地使用了语法错误,或者这是否符合预期?任何进一步了解这里发生的事情将不胜感激.

请注意,除了更好地理解语言之外,这里没有具体的目标.

关于@Roland和@Dason的评论的更新.

似乎行为与最初分配对象的值有关.例如,当分配给所述值VarX1:2相对于c(1, 2)的行为[<-(VarX, 2, …

r variable-assignment

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

有效使用R data.table和unique()

是否有比以下更有效的查询

DT[, list(length(unique(OrderNo)) ),customerID]
Run Code Online (Sandbox Code Playgroud)

使用客户ID,订单号和产品系列项细化LONG格式表,这意味着如果客户在该交易中购买了多个项目,则会有重复的行具有相同的订单ID.

试图找出独特的购买方式.length()按客户ID计算所有订单ID,包括重复项,仅查找唯一编号.

从这里编辑:

这是一些虚拟代码.理想情况下,我正在寻找的是使用第一个查询的输出unique().

df <- data.frame(
             customerID=as.factor(c(rep("A",3),rep("B",4))),
             product=as.factor(c(rep("widget",2),rep("otherstuff",5))),
             orderID=as.factor(c("xyz","xyz","abd","qwe","rty","yui","poi")),
             OrderDate=as.Date(c("2013-07-01","2013-07-01","2013-07-03","2013-06-01","2013-06-02","2013-06-03","2013-07-01"))
             )

DT.eg <- as.data.table(df)
#Gives unique order counts
DT.eg[, list(orderlength = length(unique(orderID)) ),customerID]
#Gives counts of all orders by customer
DT.eg[,.SD, keyby=list(orderID, customerID)][, .N, by=customerID]

         ^
         |
  This should be .N, not .SD  ~ R.S.
Run Code Online (Sandbox Code Playgroud)

r data.table

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

在小平面STRIP背景中的多种颜色

我想根据组修改构面背景的颜色.我不确定这是否可行.具体来说,我使用facet_grid(不facet_wrap)多层.

## Sample data
dat <- mtcars
## Add in some colors based on the data
dat$facet_fill_color <- c("red", "green", "blue", "yellow", "orange")[dat$gear]

## Create main plot
library(ggplot2)
P <- ggplot(dat, aes(x=cyl, y=wt)) + geom_point(aes(fill=hp)) + facet_grid(gear+carb ~ .)

## I can easily cahnge the background using: 
P + theme(strip.background = element_rect(fill="red"))
Run Code Online (Sandbox Code Playgroud)

但是,我想为不同的组改变颜色.理想情况下,如下所示(当然不起作用)

P + theme(strip.background = element_rect(fill=dat$facet_fill_color))
P + theme(strip.background = element_rect(aes(fill=facet_fill_color)))
Run Code Online (Sandbox Code Playgroud)

小平面背景可以有多种颜色吗?

(相关,但不是上面的实际答案: ggplot2:基于数据集中变量的facet_wrap条带颜色)

r facet ggplot2

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

是否()函数生成增长列表

by函数是否生成一次只增长一个元素的列表?

我需要处理一个数据框,其中大约有4M观测值按因子列分组.情况类似于以下示例:

> # Make 4M rows of data
> x = data.frame(col1=1:4000000, col2=10000001:14000000)
> # Make a factor
> x[,"f"] = x[,"col1"] - x[,"col1"] %% 5
>   
> head(x)
  col1     col2 f
1    1 10000001 0
2    2 10000002 0
3    3 10000003 0
4    4 10000004 0
5    5 10000005 5
6    6 10000006 5
Run Code Online (Sandbox Code Playgroud)

现在,tapply其中一个列需要一段合理的时间:

> t1 = Sys.time()
> z = tapply(x[, 1], x[, "f"], mean)
> Sys.time() - t1
Time difference …
Run Code Online (Sandbox Code Playgroud)

benchmarking r tapply

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

计算线路经过的网格象限的有效方法

我有一个2维单位网格,以及一组以任何有理数开始和结束的线段.我需要一种有效的方法来计算线路经过的网格单元.例如,行:

从(2.1,3.9)到(3.8,4.8)通过具有左下点(2,3),(2,4)和(3,4)的网格单元.

是否有快速,有效的方法从线路的端点计算这些象限?

我将在R工作,但Python或伪代码的答案也会起作用.谢谢!

python r pseudocode

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

简洁地同时分配名称和值

我发现自己经常写下以下两行.有简洁的替代方案吗?

      newObj  <- vals
names(newObj) <- nams

# This works, but is ugly and not necessarily preferred
'names<-'(newObj <- vals, nams)
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似的东西(当然这不起作用):

newObj <- c(nams = vals)
Run Code Online (Sandbox Code Playgroud)

将它包装在一个函数中也是一个选项,但我想知道功能是否已经存在.

样本数据

vals <- c(1, 2, 3)
nams <- c("A", "B", "C") 
Run Code Online (Sandbox Code Playgroud)

r assign

6
推荐指数
2
解决办法
344
查看次数

read.xls - 读取可变长度的工作表列表及其名称

鉴于几个.xls具有不同页数的文件,我读他们到R使用read.xlsgdata包.我有两个相关的问题(解决第二个问题应解决第一个问题):

  1. 提前知道每个.xls文件将有多少张纸,实际上这个值会因文件而异.
  2. 我需要捕获工作表的名称,这是相关数据

现在,要解决(1),我正在使用try()并迭代工作表编号,直到我遇到错误.

如何获取工作表名称列表以便我可以迭代它们?

xls r vectorization gdata sapply

6
推荐指数
2
解决办法
1912
查看次数

将excel文件中的*cell-formatting*信息导入R

我已经获得了excel文件(.xlsx),其中单元格的格式是我需要捕获的相关信息.感兴趣的关键格式是(1)单元格颜色和(2)边框(左+右,全框或不存在).

是否可以将其读入R?

xls r xlsx

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

提高查找第一次事件的效率

我正在使用大型时间序列data.table,60*B*illion行X 50列

对于三个特定列,我想添加一个相应的T/F列,指示idCol每次事件发生时的第一次

换句话说,对于ColumnA,新列将是

DT[, flag.ColumnA :=  dateCol==min(dateCol)
   , by=list(idCol, ColumnA)]
Run Code Online (Sandbox Code Playgroud)

但是:经常有联系,关系min(dateCol)的解决方案是只标记一个元素TRUE,剩下的FALSE.这导致以下方法

## Set key to {idCol, dateCol} so that the first row in each group
##   is the unique element in that group that should be set to TRUE
setkey(DT, idCol, dateCol)
DT[, flag.ColumnA := FALSE]
DT[, { DT[ .I[[1L]], flag.ColumnA := TRUE] }  # braces here are just for easier reading
   , by=list(idCol, ColumnA)]
Run Code Online (Sandbox Code Playgroud)

问题是第二种方法将运行时间增加了3倍以上,而第一种方法每列需要花费一个多小时(在相对较快的盒子上)

我还考虑在方法1中手动解析关系,但这比上述两种方法慢.

有关如何更有效地完成此任务的任何建议? 以下示例数据


预期产出样本

DT["ID_01"] …
Run Code Online (Sandbox Code Playgroud)

optimization r data.table

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

为什么在Mac vs Linux上通过`R -e ..`的字符串命令需要额外的转义?

这个让我难过。我执行了一个简单的Shell脚本,该脚本可以在我的Linux(AWS aka CentOS)计算机上正常运行,但是在我的Mac OS X计算机上崩溃。原来\,字符串命令中的转义()需要一个额外的转义字符(\\)。

有人可以启发我了解我在这里缺少的内容吗,即,在需要此功能的Mac上运行R脚本又有什么用呢?

打电话说时,*未*观察到该行为python3 -c ..

在两台机器上,我正在使用bash,特别是/bin/bash

注意:Mac是R:3.5.1 vs 3.4.1的稍晚版本,但是如果这是罪魁祸首,我将感到非常惊讶。有人可以确认吗?


简单的例子:

R --vanilla -e 'cat(" Hello \n World \n ")'
Run Code Online (Sandbox Code Playgroud)

上面的代码在CentOS机器上可以很好地运行,但是需要附加的转义符(\\n而不是\n)才能正确执行。(底部示例)

为了进行参考/比较,以下python命令在我测试过的每台Mac OS X,CentOS计算机上均可以相同地工作。

python3 -c 'print("Hello \n World")'
Run Code Online (Sandbox Code Playgroud)

有关详细信息,这是比较两台计算机上的两个命令的输出

1. R --vanilla -e 'cat(" Hello \n World \n ")'
2. R --vanilla -e 'cat(" Hello \\n World \\n ")'
Run Code Online (Sandbox Code Playgroud)

1。

R --vanilla -e 'cat(" Hello \n World …
Run Code Online (Sandbox Code Playgroud)

linux macos shell r amazon-linux

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