我正在使用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[...]
如果有人能指出我正确的方向,那将是一个巨大的帮助!
答案 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;无论你的专栏名称是什么