簡體   English   中英

如何將數據框列中的每個值移到其自己的列中?

[英]How can I move each value in a data frame column into its own column?

我正在使用R來構建和分析由同事創建的Python腳本創建的數據集,該數據集返回以下結構,其中13表示樣本數,3128是對特征進行觀測的數量,這些數字被編碼為個位數(樣品名稱后的每個數字代表一列,該值封裝了特征的編碼):

13 3128
>1062_0    0000000000[...]
>1066A_0    000001010[...]
>1067A_0    000002010[...]
>1067B_0    110013010[...]
>1067C_0    000024010[...]
>1067D_0    000024010[...]
>1084A_0    200100010[...]
>1084B_0    001005110[...]
>1084C_0    000000010[...]
>1086_0    0100002100[...]
>1087_0    3002040100[...]
>1088_0    0000060111[...]
>C105_0    0000050120[...]

我正在努力將這些數據獲取到具有13行和3128列的數據框中。

我已經使用了phylotools的read.phylip函數來讀取上面的這個文件,並將其放入data.frame中:

SL_FFR_input <- read.phylip(fil = "matrix.phy")
SL_FFR_frame <- phy2dat(SL_FFR_input)

但是,這導致兩列的數據幀,V1是樣本名稱,V2是所有單位數字編碼的字符串。

下面將顯示有用的框架,其中樣本名稱構成行名稱,並且每個值現在都有自己的列。

>1062_0     0 0 0 0 0 0 0 0 0[...]
>1066A_0    0 0 0 0 0 1 0 1 0[...]
>1067A_0    0 0 0 0 0 2 0 1 0[...]
>1067B_0    1 1 0 0 1 3 0 1 0[...]
>1067C_0    0 0 0 0 2 4 0 1 0[...]
>1067D_0    0 0 0 0 2 4 0 1 0[...]
>1084A_0    2 0 0 1 0 0 0 1 0[...]
>1084B_0    0 0 1 0 0 5 1 1 0[...]
>1084C_0    0 0 0 0 0 0 0 1 0[...]
>1086_0     0 1 0 0 0 0 2 1 0[...]
>1087_0     3 0 0 2 0 4 0 1 0[...]
>1088_0     0 0 0 0 0 6 0 1 1[...]
>C105_0     0 0 0 0 0 5 0 1 2[...] 

如果有人可以指出正確的方向,那將是巨大的幫助!

我建議使用dplyr + tidyr,可以使用strsplit和rbind進行此操作,但這很丑陋。

library(dplyr)
library(tidyr)
df1 <- data.frame(snames = c('a','b','c'),
                  digits = c('0000000000000',
                             '0000100000000',
                             '0000000001000'))
result <- df1 %>% separate(digits, paste0('X',1:13),sep = 1:12)

它將在列中字符位置1:12處分開,並命名列X1-> X13

編輯:對於您的情況,將13更改為3128,將12更改為3127,將“數字”更改為您列的名稱

暫無
暫無

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

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