小编Mik*_*ike的帖子

R:在data.frame列中拆分不平衡列表

假设您有一个具有以下结构的数据框:

df <- data.frame(a=c(1,2,3,4), b=c("job1;job2", "job1a", "job4;job5;job6", "job9;job10;job11"))
Run Code Online (Sandbox Code Playgroud)

b是以分号分隔的列表(按行不平衡).理想的data.frame将是:

id,job,jobNum
1,job1,1
1,job2,2
...
3,job6,3
4,job9,1
4,job10,2
4,job11,3
Run Code Online (Sandbox Code Playgroud)

我有一个部分解决方案,需要将近2小时(170K行):

# Split the column by the semicolon.  Results in a list.
df$allJobs <- strsplit(df$b, ";", fixed=TRUE)

# Function to reshape column that is a list as a data.frame
simpleStack <- function(data){
    start <- as.data.frame.list(data)                       
    names(start) <-c("id", "job")
    return(start)
}
# pylr!
system.time(df2 <- ddply(df, .(id), simpleStack))
Run Code Online (Sandbox Code Playgroud)

它似乎是一个大小问题,因为如果我跑

system.time(df2 <- ddply(df[1:4000,c("id", "allJobs")], .(id), simpleStack))
Run Code Online (Sandbox Code Playgroud)

它只需要9秒钟.首先使用sapply(使用不同的函数)转换为一组data.frames很快,但所需的`rbind'需要更长的时间.

r plyr dataframe

4
推荐指数
2
解决办法
2380
查看次数

停止在 Stata 和 estout 中转义乳胶数学字符

如果变量标签具有这样的字符,Stata 中的estout命令将始终转义下划线。例如,在简单的回归之后运行它,然后

qui sum res, d
estadd scalar test = r(mean)
Run Code Online (Sandbox Code Playgroud)

并输出到 tex 文件:

esttab using "filename.tex", stats(r2 test, labels("\$R^2\$"  "\$T_i\$")) se r2  
star(* 0.10 ** 0.05  *** 0.01) label   replace   fragment nomtitles  
coeflabels(_cons "$\alpha\$") nonumbers  tex
Run Code Online (Sandbox Code Playgroud)

$T\_i$filename.tex输出中创建一个字符串。尝试使用 label \$\beta=char(95)'{HML}\$` 会导致相同的行为。显然,'outreg2' 命令足够聪明,如果它看到它处于数学模式就不会转义这个字符,但是 estout 没有继承这种行为。有没有一种聪明的方法来阻止下划线的转义?

latex stata

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

标签 统计

dataframe ×1

latex ×1

plyr ×1

r ×1

stata ×1