首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分割R中每个记录中的数据?

如何分割R中每个记录中的数据?
EN

Stack Overflow用户
提问于 2018-03-06 09:58:17
回答 2查看 111关注 0票数 1

我有一张有专栏的数据,

代码语言:javascript
复制
service-id       
ids-1-2-3-4-5
ids-1-2-6
ids-5
ids-7-8

还有很多其他的专栏。我想把数据if 1-2-3-4-5分割成不同的列1,2,3.8作为一个热编码,如果不存在的话,还有列1和rest 0。

代码语言:javascript
复制
col.1 col.2 col.3 col.4 col.5 col.6   ..... col.8
1     1     1     1       1    0      .....  0          for ids-1-2-3-4-5
1     1     0     0       0    1      ...... 0          for ids-1-2-6

我试过tidyverse,但没有用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-06 10:20:25

一个使用基本R码的解决方案。

你的数据

代码语言:javascript
复制
db<-data.frame("service-id"=c("ids-1-2-3-4-5","ids-1-2-6","ids-5","ids-7-8"))

标识列数

代码语言:javascript
复制
ncol<-max(suppressWarnings(as.numeric(unlist(strsplit(as.character(db$service.id),"-")))),na.rm = T)

提取数字id列表

代码语言:javascript
复制
number_list<-strsplit(as.character(db$service.id),"-")
number_list<-suppressWarnings(lapply(number_list,as.numeric))
number_list <- lapply(number_list, function(x) x[!is.na(x)])

创建输出数据

代码语言:javascript
复制
f<-function(x,ncol)
{
    return(as.numeric(seq(1:ncol) %in% x))
}
out<-t(data.frame(lapply(number_list, f, ncol=ncol)))
colnames(out)<-paste0("col.",seq(1:ncol))
rownames(out)<-NULL

你的输出

代码语言:javascript
复制
out
     col.1 col.2 col.3 col.4 col.5 col.6 col.7 col.8
[1,]     1     1     1     1     1     0     0     0
[2,]     1     1     0     0     0     1     0     0
[3,]     0     0     0     0     1     0     0     0
[4,]     0     0     0     0     0     0     1     1
票数 1
EN

Stack Overflow用户

发布于 2018-03-06 10:04:30

如果我们需要tidyverse选项,这里有一个方法

代码语言:javascript
复制
library(tidyverse)
df1 %>%
   rownames_to_column('rn') %>% 
   extract(service.id, into = c('id', 'col'), "^([^-]+)-(.*)") %>% 
   separate_rows(col) %>%
   mutate(n = 1, col = paste0("col.", col)) %>% 
   spread(col, n, fill = 0) %>%
   select(-rn, -id)
#  col.1 col.2 col.3 col.4 col.5 col.6 col.7 col.8
#1     1     1     1     1     1     0     0     0
#2     1     1     0     0     0     1     0     0
#3     0     0     0     0     1     0     0     0
#4     0     0     0     0     0     0     1     1

数据

代码语言:javascript
复制
df1 <- structure(list(service.id = c("ids-1-2-3-4-5", "ids-1-2-6", "ids-5", 
 "ids-7-8")), .Names = "service.id", class = "data.frame", row.names = c(NA, 
 -4L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49128020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档