我正在使用大约3.3千兆字节的Stata .dta文件,因此它很大但不会过大.我有兴趣使用IPython并尝试使用Pandas导入.dta文件,但是有些事情正在发生.我的盒子有32千兆字节的RAM,并试图加载.dta文件导致所有使用的RAM(约30分钟后)和我的计算机停止运行.这不是'感觉'正确,因为我能够使用外部包中的read.dta()打开R中的文件没有问题,并且使用Stata中的文件很好.我使用的代码是:
%time myfile = pd.read_stata(data_dir + 'my_dta_file.dta')
Run Code Online (Sandbox Code Playgroud)
我在Enthought的Canopy程序中使用IPython.'%time'的原因是因为我有兴趣对R的read.dta()进行基准测试.
我的问题是:
我是data.table包的忠实粉丝,我无法将plyr包的ddply中的一些代码转换为data.table中的等价物.ddply的代码是:
dfx <- data.frame(
group = c(rep('A', 8), rep('B', 15), rep('C', 6)),
sex = sample(c("M", "F"), size = 29, replace = TRUE),
age = runif(n = 29, min = 18, max = 54),
age2 = runif(n = 29, min = 18, max = 54)
)
ddply(dfx, .(group, sex), numcolwise(sum))
Run Code Online (Sandbox Code Playgroud)
我想要做的是在多个列之间求和,而不必手动指定列名.data.table包中的手册等价物是:
dfx.dt = data.table(dfx)
dfx.dt[ , sum.age := sum(age), by="group,sex"]
dfx.dt[ , sum.age2 := sum(age2), by="group,sex"]
dfx.dt[!duplicated(dfx.dt[ , {list(group, sex)}]), ]
Run Code Online (Sandbox Code Playgroud)
明确地说,我的问题是"有没有办法在data.table中执行等效的ddply代码?"
非常感谢任何帮助,谢谢.