注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mobius-Band

 
 
 

日志

 
 

R语言将不规则的数据框规范化  

2016-07-28 22:03:59|  分类: R |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        有时为了将数据写入数据库,会有将几个数据写成一个字符串存在一个字段里的情况。如果遇到这种情况,从数据库里读出的数据其实不是标准的R语言data.frame结构,而实质上有点像list结构。如下图所示。
R语言将不规则的数据框规范化 - Mobius-Band - Mobius-Band
        这种结构显然不利用后续的分析,为此,我们需要将这种不规范的data.frame结构规范化。
        这里只是提供一种思路处理该类问题。
首先我们要做的是将y中的每个元素独立出来,这里我们使用stringr包中str_split_fixed(string, pattern, n)函数。这个函数有3个参数,第一个数需要拆分的字符串,第二个是一个正则表达式告诉函数在哪里拆分,第三个参数在解决这个问题上十分有用,它表示将这个字符串拆成多少个。如果不够,默认以""空字符串补至该个数。
       例如,我们针对图中的数据框可以先把y变量拆成一个3X3的矩阵。

library(stringr)
z=str_split_fixed(df$y,";",3)

z

# [,1] [,2] [,3]
#[1,] "2013" "" ""
#[2,] "2013" "2016" ""
#[3,] "2014" "2015" "2016"

得到的上述结果。
然后将得到的矩阵z转成data.frame格式并利用cbind()函数将其与原始的数据框合并。

z=as.data.frame(z)
df=cbind(df,z)

执行上述代码可以得到如下数据框。
R语言将不规则的数据框规范化 - Mobius-Band - Mobius-Band
  利用reshape2包里的melt()函数将x,v1,v2,v3列进行变形。

library(reshape2)
df=melt(df,id.vars = "x",measure.vars = c("V1","V2","V3"))

执行上述代码,df数据框将会变成如下所示。
R语言将不规则的数据框规范化 - Mobius-Band - Mobius-Band
  最后我们将不需要的行与列去掉,得到规范化的数据框

df[df$value!="",c(1,3)]

R语言将不规则的数据框规范化 - Mobius-Band - Mobius-Band
 
  评论这张
 
阅读(50)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018