[英]How to add list of tuples in a for loop to data frame where each tuple object is in its own column?
[英]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.