【发布时间】:2015-04-30 08:07:29
【问题描述】:
所以我有一个 16 列和约 1700 万行的数据框。
我想先对数据框做一些ddply,然后看看不同列之间的相关性。实现这一目标的最佳和最有效的方法是什么?我目前的方法耗时太长:
数据框为all_df,列名称为A、B、C、...、N、O、P
avB <- ddply(all_df, c(“A”), summarise, NB_av=mean(B), NB_sd=sd(B))
avC <- ddply(all_df, c(“A”), summarise, NC_av=mean(C), NC_sd=sd(C))
avD <- ddply(all_df, c(“A”), summarise, ND_av=mean(D), ND_sd=sd(D))
avE <- ddply(all_df, c(“A”), summarise, NE_av=mean(E), NE_sd=sd(E))
avF <- ddply(all_df, c(“A”), summarise, NF_av=mean(F), NF_sd=sd(F))
avG <- ddply(all_df, c(“A”), summarise, NG_av=mean(G), NG_sd=sd(G))
summary_df <- avB
summary_df <- merge(summary_df, avC, by=c(“A”))
summary_df <- merge(summary_df, avD, by=c(“A”))
summary_df <- merge(summary_df, avE, by=c(“A”))
summary_df <- merge(summary_df, avF, by=c(“A”))
summary_df <- merge(summary_df, avG, by=c(“A”))
#quick look at the correlation
plot((summary_df[,c(2,4,6,8,10,12)]), gap=0)
所以,事实上,我决定在 MySQL 中做很多这些,平均值,标准偏差等,然后在 R 中进行最终的关联分析。但是,我觉得这不是很优雅。
为什么我使用数据框而不是数据表?因为我正在读取一个 MySQL 表到 R 中,语法 dbGetQuery(con,"select * from mysql_table") 返回一个数据框。
【问题讨论】:
-
然后把data.frame转成data.table?
-
您想要除 1 之外的所有列的均值和标准差吗?
-
你可以试试
dplyr即。library(dplyr); all_df%>% group_by(A) %>% summarise_each(funs(mean, sd), B:G) -
@akrun 如果你可以添加这个作为答案,可能有一些基准测试,我会 +1 :)。
标签: r dataframe large-data bigdata