繁体   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