首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要拆分包含不同数量的变量名和观察值的双重连接数据的列

需要拆分包含不同数量的变量名和观察值的双重连接数据的列
EN

Stack Overflow用户
提问于 2019-04-27 10:48:55
回答 1查看 71关注 0票数 1

我有一个"sample_values“列,其中包含不同数量的双重连接数据,并用",”和":“字符分隔。我需要将用",“分隔的值转换成新的变量(列),用":”分隔的值表示这些新变量的观察值。有问题的data.frame的一小部分如下所示:

代码语言:javascript
复制
```{r}

CDR3 <- c("CASSKGTGGPYEQYF","CASSSDTDPSYGYTF","CASSFGTGKNTEAFF","CASSPRPRYYEQYF")

sample_values <- c("sample_a:36,sample_b:24,sample_c:56","sample_a:47","sample_a:73,sample_b:12","sample_c:76,sample_d:89")

df <- data.frame(CDR3,sample_values)

df

CDR3 sample_values

1机箱sample_a:36、sample_b:24、sample_c:56

2 CASSSDTDPSYGYTF sample_a:47

3 CASSFGTGKNTEAFF sample_a:73,sample_b:12

4 CASSPRPRYYEQYF sample_c:76,sample_d:8

代码语言:javascript
复制

我想以以下结果结束:

代码语言:javascript
复制
```{r}
代码语言:javascript
复制
         CDR3 sample_a sample_b sample_c sample_d

1 CASSKGTGGPYEQYF 36 24 56 0

2 CASSSDTDPSYGYTF 47 0 0 0

3 CASSFGTGKNTEAFF 73 12 0 0

4 CASSPRPRYYEQYF 0 0 76 89

代码语言:javascript
复制

我会注意到,没有观察到的应该解释为零。

我已经尝试过使用tidyr包中的separate()spread()的各种组合,以及splitstackshape包中的cSplit()。由于要在列中分隔的观测值数量不同,tidyr选项失败,而splitstackshape选项由于内存不足(未删节的数据文件大小为485 MB )而失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-27 11:07:38

使用tidyverse,我们可以首先将所有的sample_values放入单独的行中,然后将列名和值放入单独的列中,最后将其spread为宽格式,用0填充缺少的值。

代码语言:javascript
复制
library(tidyverse)

df %>%
  separate_rows(sample_values, sep = ",") %>%
  separate(sample_values, into = c("col", "values"), sep = ":") %>%
  spread(col, values, fill = 0)


# CDR3            sample_a sample_b sample_c sample_d
#  <fct>           <chr>    <chr>    <chr>    <chr>   
#1 CASSFGTGKNTEAFF 73       12       0        0       
#2 CASSKGTGGPYEQYF 36       24       56       0       
#3 CASSPRPRYYEQYF  0        0        76       89      
#4 CASSSDTDPSYGYTF 47       0        0        0       
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55876826

复制
相关文章

相似问题

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