时间:2021-05-20
想了好长时间名字,不知道要解决的问题的名字叫什么,直接上问题demo
问题demo
现在有用户消费金额的数据:
用户 日期 金额 小明 2016-01 300 小明 2016-02 500 小明 2016-03 400 小刘 2016-01 700 小刘 2016-02 800 小刘 2016-03 600我将以上数据格式为一对多数据(想不出好名字,敬请大家拍砖)
还有一种数据形式如下,我将如下格式数据称为1对1数据
用户 2016-01 2016-02 2016-03 小明 300 500 400 小刘 700 800 600如何用R语言实现1对多数据与1对1数据之间的互换,在这里写了一个简单的小函数,大家有好的想法敬请提出。
生成1对1数据集的代码如下:
#创建数据集c1<-c("小明",300,500,400)c2<-c("小刘",700,800,600)dt<-as.data.frame(rbind(c1,c2))names(dt)<-c("用户","2016-01","2016-02","2016-03")构建1对多数据的转换函数:
##data原始数据集##colList要变换的列##要保留的主键列One2More<-function(data,colList,primaryCol){ result=data.frame(NULL) for(r in c(1:nrow(data))){ temp<-as.data.frame(t(data[r,colList])) temp$日期<-row.names(temp) temp<-cbind(temp,data[r,primaryCol]) names(temp)<-c("c1","c2","c3")#临时起的名字,可按自己需求进行修改 #编行号开始,如果没有要求,此步可省略 resultRows<-nrow(result) tempRows<-nrow(temp) row.names(temp)<-c((resultRows+1):(resultRows+tempRows)) #编行号结束 result<-rbind(result,temp) } result;}执行代码如下:
One2MoreResult<-One2More(dt,c("2016-01","2016-02","2016-03"),"用户")结果如下图所示:
针对多转一我们需要安装plyr包,函数如下:
#如果有plyr,请跳过此步安装install.packages("plyr")library(plyr)##data:数据集##primaryCol:要分组的那一列##rowNameCols:想要变成表头的列More2One<-function(data,primaryCol,rowNameCols){ ddply(data,primaryCol,function(k){colNames<-k[,rowNameCols];row.names(k)<-k[,rowNameCols];k<-k[,-c(which(colnames(k)==rowNameCols | colnames(k)==primaryCol ))];t(k)})}注意:如果使用上文中One2MoreResult数据,请注意数据类型,得出的数值结果为因子类型,请先进行转换,转换代码如下:
One2MoreResult$c1<-as.numeric(as.character(One2MoreResult$c1))此时One2MoreResult的数据如下:
此时要按照c3进行分组,将c2列放在表头去
执行代码如下:
More2OneResult<-More2One(One2MoreResult,"c3","c2")结果如下图所示:
如果有时间会解决如下问题:
1. 提高代码的通用性
2. 列名或表头名可以通过指定来解决
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、R语言strsplit用于分割字符串创建测试数据>testtest[1]"aabbccddeeff">class(test)##测试数据为字符[1]"cha
大数据文摘出品有些业界从业人士对R语言的价值并不认可,他们认为R语言只针对统计分析。但在与计算机领域朋友的沟通中,R语言其实已经成长为一种多功能的编程语言,它的
R语言用来存储数据的对象包括:向量,因子,数组,矩阵,数据框,时间序列(ts)以及列表意义介绍1.向量(一维数据):只能存放同一类型的数据语法:c(data1,
R语言中的数据重塑是关于改变数据被组织成行和列的方式。大多数时间R语言中的数据处理是通过将输入数据作为数据帧来完成的。很容易从数据帧的行和列中提取数据,但是在某
Pandas类似R语言中的数据框(DataFrame),Pandas基于Numpy,但是对于数据框结构的处理比Numpy要来的容易。1.Pandas的基本数据结