我正在尝试使用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在以下链接中建议的较慢方法:
我正在尝试实现更快的自联接但无法使其工作.
有没有人有什么建议?
我在设置面板数据模型时遇到问题.
以下是一些示例数据:
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'吗?
提前感谢您的帮助!
我试图基于多个条件上的两个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) 我正在寻找加速我的代码的方法.我正在调查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) 我有一个导入函数的问题.
假设我有一个名为"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)