如何将数据框列中的每个值移动到其自己的列中?

时间:2015-10-11 19:05:35

标签: python r dataframe

我正在使用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行和3,128列的数据框中。

我使用了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[...] 

如果有人能指出我正确的方向,那将是一个巨大的帮助!

1 个答案:

答案 0 :(得分:0)

我推荐使用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 - &gt; X13

编辑:对于你的情况,改变13到3128,以及12到3127,&#34;数字&#34;无论你的专栏名称是什么