簡體   English   中英

需要拆分一列,包含不同數量的變量名稱和觀察值的雙重連接數據

[英]Need to split a column containing varying numbers of doubly concatenated data of variable names and observations

我有一列“ sample_values”,其中包含用“,”和“:”字符分隔的不同數量的雙重連接數據。 我需要將用“,”分隔的值變成新變量(列),並用“:”分隔這些值以觀察這些新變量。 這里顯示了有問題的data.frame的一小部分:

```{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 CASSKGTGGPYEQYF 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
```  

我想得出以下結果:

```{r}
             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
```  

我將注意到,沒有觀察值應解釋為零。

我已經嘗試過使用tidyr包中的tidyr separate()spread()各種組合,以及tidyr包中的cSplit()來進行此splitstackshape tidyr選項由於在列中要分離的觀察點數量不同而失敗,而splitstackshape選項由於內存不足(未刪節的數據文件大小為485 MB)而失敗。

使用tidyverse我們可以首先將所有sample_values帶入單獨的行,然后separate列名和值separate到單獨的列中,最后spreadspread為寬格式,以0填充缺失值。

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       

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM