l******9 发帖数: 579 | 1 【 以下文字转载自 Statistics 讨论区 】
发信人: light009 (light009), 信区: Statistics
标 题: data grouping, sub-grouping by column variable in R
发信站: BBS 未名空间站 (Wed Feb 26 13:25:43 2014, 美东)
I am working on data collection by R on Win7.
The given data is:
var1 var2 value
I need to do grouping by var1 and then for each var1 , do grouping by var2.
Then, the output is column vectors of values that are associated with the
same var1 and var2. Here, var1 and var2 are like keys.
Example,
var1 var2 value
1 56 649578
2 17 357835
1 88 572397
2 90 357289
1 56 427352
2 17 498455
1 88 354623
2 90 678658
The result should be
var1 var2 value
1 56 649578
1 56 427352
1 88 354623
1 88 572397
2 17 357835
2 17 498455
2 90 357289
2 90 678658
And, I need to print the values in a csv file as
For var 1 as 1:
649578 354623
427352 572397
For var 1 as 2:
357835 357289
498455 678658
And, I also need to print the values in a csv file as
For var 1 = 1:
1 56 649578
1 56 427352
1 88 354623
1 88 572397
For var1 = 2:
2 17 357835
2 17 498455
2 90 357289
2 90 678658
How to do it ?
I found some posts, which are not directly useful.
Any help would be appreciated. | w**********y 发帖数: 1691 | 2 setwd("C:")
(data <- data.frame(var1=rep(1:2,4), var2=sample(1:100,8), value = rnorm(8)))
(data <- data[with(data,order(var1,var2)),])
level.var1 <- unique(data$var1)
for (v in level.var1){
subdata <- data[data$var1==v,]
write.csv(subdata, paste0("format2",v,".csv"), row.names=F)
write.table(matrix(subdata$value,,2), paste0("format1",v,".csv"), row.
names=F, col.names=F, sep=',')
}
Baozi pls | k***g 发帖数: 7244 | 3 R 君其实不适合干这种力气活 ……
Q 君的话,lz的一个要求其实就是一行 code:
t:([] var1:n?2;var2:n?100;val:(n:8)?1.0);
`var1`var2 xasc `t;
{(-1!`$(string x),"f1.csv") 0:.h.tx[`csv;]?[`t;enlist (=;`var1;x);0b;()]}
each v:distinct t`var1
{(-1!`$(string x),"f2.csv") 0:.h.tx[`csv;]?[`t;enlist (=;`var1;x);0b;{x!x}()
,`val]} each v
K 君的话会更简单……
)))
【在 w**********y 的大作中提到】 : setwd("C:") : (data <- data.frame(var1=rep(1:2,4), var2=sample(1:100,8), value = rnorm(8))) : (data <- data[with(data,order(var1,var2)),]) : level.var1 <- unique(data$var1) : for (v in level.var1){ : subdata <- data[data$var1==v,] : write.csv(subdata, paste0("format2",v,".csv"), row.names=F) : write.table(matrix(subdata$value,,2), paste0("format1",v,".csv"), row. : names=F, col.names=F, sep=',') : }
| d*j 发帖数: 13780 | 4 K君说 “小Q, 5分钟我要一个结果, 不用给我看code” 回头说 "R, 收拾一下,出口在
那边"
()
【在 k***g 的大作中提到】 : R 君其实不适合干这种力气活 …… : Q 君的话,lz的一个要求其实就是一行 code: : t:([] var1:n?2;var2:n?100;val:(n:8)?1.0); : `var1`var2 xasc `t; : {(-1!`$(string x),"f1.csv") 0:.h.tx[`csv;]?[`t;enlist (=;`var1;x);0b;()]} : each v:distinct t`var1 : {(-1!`$(string x),"f2.csv") 0:.h.tx[`csv;]?[`t;enlist (=;`var1;x);0b;{x!x}() : ,`val]} each v : K 君的话会更简单…… :
| o*******6 发帖数: 6113 | 5 干这种力气活可以考虑PL/SQL
()
【在 k***g 的大作中提到】 : R 君其实不适合干这种力气活 …… : Q 君的话,lz的一个要求其实就是一行 code: : t:([] var1:n?2;var2:n?100;val:(n:8)?1.0); : `var1`var2 xasc `t; : {(-1!`$(string x),"f1.csv") 0:.h.tx[`csv;]?[`t;enlist (=;`var1;x);0b;()]} : each v:distinct t`var1 : {(-1!`$(string x),"f2.csv") 0:.h.tx[`csv;]?[`t;enlist (=;`var1;x);0b;{x!x}() : ,`val]} each v : K 君的话会更简单…… :
| w**********y 发帖数: 1691 | 6 如果你非要一行,做法也很多,比如:
ddply(data, ~ var1, function(x) write.csv(x, file=paste0(x$var1[[1]],".csv")
))
量体裁衣。给个1万行的data和1亿行的data当然该有不同的选择
()
【在 k***g 的大作中提到】 : R 君其实不适合干这种力气活 …… : Q 君的话,lz的一个要求其实就是一行 code: : t:([] var1:n?2;var2:n?100;val:(n:8)?1.0); : `var1`var2 xasc `t; : {(-1!`$(string x),"f1.csv") 0:.h.tx[`csv;]?[`t;enlist (=;`var1;x);0b;()]} : each v:distinct t`var1 : {(-1!`$(string x),"f2.csv") 0:.h.tx[`csv;]?[`t;enlist (=;`var1;x);0b;{x!x}() : ,`val]} each v : K 君的话会更简单…… :
| k***g 发帖数: 7244 | 7 你这个 call plyr library了。。。
只用K基本函数的做法:
{{.[-1!`$($x),".csv";();:;y]}[x;]","0:?[`t;,(=;`var1;x);0b;()]}'?t`var1
所有函数都只有一个字符。。。
我觉得K肯定会比R快上百倍吧,回头可以测试一下
")
【在 w**********y 的大作中提到】 : 如果你非要一行,做法也很多,比如: : ddply(data, ~ var1, function(x) write.csv(x, file=paste0(x$var1[[1]],".csv") : )) : 量体裁衣。给个1万行的data和1亿行的data当然该有不同的选择 : : ()
| w**********y 发帖数: 1691 | 8 其实也可以了:
apply(data, 1, function(x) write.table(t(x), paste0(x[1],'.csv'),sep=',',
append=T, col.names=F, row.names=F))
不过赞高手, 精通各种语言啊
【在 k***g 的大作中提到】 : 你这个 call plyr library了。。。 : 只用K基本函数的做法: : {{.[-1!`$($x),".csv";();:;y]}[x;]","0:?[`t;,(=;`var1;x);0b;()]}'?t`var1 : 所有函数都只有一个字符。。。 : 我觉得K肯定会比R快上百倍吧,回头可以测试一下 : : ")
| k***g 发帖数: 7244 | 9 我也是R的拥趸,不过高频 data除了Q/K似乎没有更好的统计/数据库工具了,一些
trading firms好像有他们自己的 column-oriented的数据库,但是不知道具体的
performance怎么样。
【在 w**********y 的大作中提到】 : 其实也可以了: : apply(data, 1, function(x) write.table(t(x), paste0(x[1],'.csv'),sep=',', : append=T, col.names=F, row.names=F)) : 不过赞高手, 精通各种语言啊
|
|