如何将键/值字符串转换为单独的列? [英] How to transform a key/value string into separate columns?

查看:88
本文介绍了如何将键/值字符串转换为单独的列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个data.framekey/value string列,其中包含有关一组用户的功能及其值的信息.像这样:

I've got a data.frame with key/value string column containing information about features and their values for a set of users. Something like this:

data<-data.frame(id=1:3,statid=c("s003e","s093u","s085t"),str=c("a:1,7:2","a:1,c:4","a:3,b:5,c:33"))
data
#   id statid          str
# 1  1  s003e      a:1,7:2
# 2  2  s093u      a:1,c:4
# 3  3  s085t a:3,b:5,c:33

我想做的是为每个功能创建一个data.frame包含列.像这样:

What I'm trying to do is to create a data.frame containing column for every feature. Like this:

data_after<-data.frame(id=1:3,statid=c("s003e","s093u","s085t"),
                   a=c(1,1,3),b=c(0,0,5),c=c(0,4,33),"7"=c(2,0,0))
data_after
#   id statid a b  c X7
# 1  1  s003e 1 0  0  2
# 2  2  s093u 1 0  4  0
# 3  3  s085t 3 5 33  0

我试图使用stringr包中的str_split,然后将创建的列表的元素转换为data.frames(例如,使用plyr中的rbind.fill绑定它们),但是无法完成.任何帮助将不胜感激!

I was trying to use str_split from stringr package and then transform elements of created list to data.frames (later bind them using for example rbind.fill from plyr) but couldn't done it. Any help will be appreciated!

推荐答案

您可以使用dplyrtidyr:

library(dplyr); library(tidyr)
data %>% mutate(str = strsplit(str, ",")) %>% unnest(str) %>% 
         separate(str, into = c('var', 'val'), sep = ":") %>% spread(var, val, fill = 0)

#   id statid 7 a b  c
# 1  1  s003e 2 1 0  0
# 2  2  s093u 0 1 0  4
# 3  3  s085t 0 3 5 33

这篇关于如何将键/值字符串转换为单独的列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆