我有一个像这样的矩阵(1000 x 2830):

        9178    3574    3547
160     B_B     B_B      A_A
301     B_B     A_B      A_B
303     B_B     B_B      A_A
311     A_B     A_B      A_A
312     B_B     A_B      A_A
314     B_B     A_B      A_A

并且我想获得以下内容(复制名称和拆分每列的每个元素):
      9178   9178   3574   3574   3547   3547
160     B      B      B      B      A      A
301     B      B      A      B      A      B
303     B      B      B      B      A      A
311     A      B      A      B      A      A
312     B      B      A      B      A      A
314     B      B      A      B      A      A

我尝试使用strsplit,但收到错误消息,因为这是一个矩阵,而不是字符串。您能否提供一些解决此问题的想法?

最佳答案

这是一个使用dplyr(对于bind_cols)和tidyr(对于separate_)以及来自基数R的lapply的选项。它假定您的数据是一个data.frame(即,您可能需要先将其转换为data.frame):

library(dplyr)
library(tidyr)

lapply(names(df), function(x) separate_(df[x], x, paste0(x,"_",1:2), sep = "_" )) %>%
  bind_cols
#  X9178_1 X9178_2 X3574_1 X3574_2 X3547_1 X3547_2
#1       B       B       B       B       A       A
#2       B       B       A       B       A       B
#3       B       B       B       B       A       A
#4       A       B       A       B       A       A
#5       B       B       A       B       A       A
#6       B       B       A       B       A       A

10-04 10:15