小编Bra*_*rad的帖子

R:使用data.table和self-join按组进行首次观察

我正在尝试使用data.table通过一组三个变量获得最高行.

我有一个有效的解决方案:

col1 <- c(1,1,1,1,2,2,2,2,3,3,3,3)
col2 <- c(2000,2000,2001,2001,2000,2000,2001,2001,2000,2000,2001,2001)
col4 <- c(1,2,3,4,5,6,7,8,9,10,11,12)
data <- data.frame(store=col1,year=col2,month=12,sales=col4)

solution1 <- data.table(data)[,.SD[1,],by="store,year,month"]
Run Code Online (Sandbox Code Playgroud)

我使用Matthew Dowle在以下链接中建议的较慢方法:

https://stats.stackexchange.com/questions/7884/fast-ways-in-r-to-get-the-first-row-of-a-data-frame-grouped-by-an-identifier

我正在尝试实现更快的自联接但无法使其工作.

有没有人有什么建议?

r self-join data.table

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

R:plm - 年固定效应 - 年和季度数据

我在设置面板数据模型时遇到问题.

以下是一些示例数据:

library(plm)

id <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2)
year <- c(1999,1999,1999,1999,2000,2000,2000,2000,1999,1999,1999,1999,2000,2000,2000,2000)
qtr <- c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4)
y <- rnorm(16, mean=0, sd=1)
x <- rnorm(16, mean=0, sd=1)

data <- data.frame(id=id,year=year,qtr=qtr,y_q=paste(year,qtr,sep="_"),y=y,x=x)
Run Code Online (Sandbox Code Playgroud)

我运行以下回归,使用'id'作为单个索引,'year'作为时间索引:

reg1 <- plm(y ~ x, data=data,index=c("id", "year"), model="within",effect="time")
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到以下错误:

重复的couple(time-id)pdim.default中的错误(index [[1]],index [[2]]):

所以为了解决这个问题,我使用了'y_q'的组合变量:

reg1 <- plm(y ~ x, data=data,index=c("id", "y_q"), model="within",effect="time")
Run Code Online (Sandbox Code Playgroud)

但这是我的问题 - 我只想要一年的固定效果,而不是一年四季.

还有另一种方法可以解决早期问题,而不是制作关系指数'y_q'吗?

提前感谢您的帮助!

regression r linear-regression plm

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

R在多个标准上交叉data.frame

我试图基于多个条件上的两个data.frames的交集来填充二进制向量.

我有代码工作,但我觉得只是为了得到二进制矢量是内存过多.

当我将我的代码应用于我的完整数据(40毫米+行)时.我开始有记忆问题.

是否有更简单的方法来生成向量?

以下是一些样本数据(例如,子样本仅包括完整样本中的obs.):

ob1_1 <- as.data.frame(cbind(c(1999),c("111","222","666","777")),stringsAsFactors=FALSE)
ob2_1 <- as.data.frame(cbind(c(2000),c("111","333","555","777")),stringsAsFactors=FALSE)
ob3_1 <- as.data.frame(cbind(c(2001),c("111","222","333","777")),stringsAsFactors=FALSE)
ob4_1 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)

full_sample <-  rbind(ob1_1,ob2_1,ob3_1,ob4_1)
colnames(full_sample) <- c("yr","ID")

ob1_2 <- as.data.frame(cbind(c(1999),c("111","222","777")),stringsAsFactors=FALSE)
ob2_2 <- as.data.frame(cbind(c(2000),c("333")),stringsAsFactors=FALSE)
ob3_2 <- as.data.frame(cbind(c(2001),c("888")),stringsAsFactors=FALSE)
ob4_2 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)

sub_sample <-  rbind(ob1_2,ob2_2,ob3_2,ob4_2)
colnames(sub_sample) <- c("yr","ID")
Run Code Online (Sandbox Code Playgroud)

这是我的工作代码:

q_intersect <- ""
q_intersect <- paste(q_intersect , "select       a.yr, a.ID       ", sep=" ")
q_intersect <- paste(q_intersect , "from         full_sample a  ", sep=" ")
q_intersect <- paste(q_intersect , "intersect                     ", sep=" ")
q_intersect <- paste(q_intersect , "select       b.yr, b.ID …
Run Code Online (Sandbox Code Playgroud)

memory r intersect sqldf

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

R plyr,data.table,应用data.frame的某些列

我正在寻找加速我的代码的方法.我正在调查apply/ ply方法以及data.table.不幸的是,我遇到了问题.

这是一个样本数据:

ids1   <- c(1, 1, 1, 1, 2, 2, 2, 2)
ids2   <- c(1, 2, 3, 4, 1, 2, 3, 4)
chars1 <- c("aa", " bb ", "__cc__", "dd  ", "__ee", NA,NA, "n/a")
chars2 <- c("vv", "_ ww_", "  xx  ", "yy__", "  zz", NA, "n/a", "n/a")
data   <- data.frame(col1 = ids1, col2 = ids2, 
                 col3 = chars1, col4 = chars2, 
          stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

这是一个使用循环的解决方案:

library("plyr")
cols_to_fix <- c("col3","col4")
for (i …
Run Code Online (Sandbox Code Playgroud)

r apply plyr data.table

5
推荐指数
2
解决办法
1770
查看次数

R:按名称的源函数/导入函数子集

我有一个导入函数的问题.

假设我有一个名为"functions"的R脚本,如下所示:

mult <- function(x,y){

   return(x*y)

}

divide <- function(x,y){

   return(x/y)

}
Run Code Online (Sandbox Code Playgroud)

目前我正在导入脚本中的所有函数:

source(file="C:\\functions.R",echo=FALSE)
Run Code Online (Sandbox Code Playgroud)

问题是(实际)R脚本变得非常大.

有没有办法只导入"mult"功能?

我在看evalSource/insertSource,但我的代码无效:

insertSource("C:\\functions.R", functions="mult")  
Run Code Online (Sandbox Code Playgroud)

import r external function

5
推荐指数
2
解决办法
1958
查看次数