如何将键/值字符串转换为单独的列? [英] How to transform a key/value string into separate columns?
本文介绍了如何将键/值字符串转换为单独的列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个data.frame
和key/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!
推荐答案
您可以使用dplyr
和tidyr
:
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屋!
查看全文