如何将数据框中所有列的值分成两部分?

问题描述 投票:0回答:1

我有一个如下形式的 R 数据框(但大约有 200K 列):

1 2 3 4 5
AA AA TT AG 抄送
AA TA GC 抄送
AA TT AG 抄送

我需要将每一列分成两部分,使其看起来如下所示:

1 2 3 4 5 6 7 8 9 10
A A A A T T A G C C
A T A A T A G C C C
A A A T T T A G C C

包 stringr 中的函数 str_split_fixed() 可以很好地按照我需要的方式将单个列拆分为两列,但我不知道如何在整个数据框中进行此操作。因为我的真实数据中有很多列,所以我不能手动拆分所有列。

我对编码相当陌生,并且尝试过 for 循环:

split_df <- matrix(0, nrow = nrow(df), ncol = (2 *ncol(df)))

for(i in 1:ncol(df)) {
split_df[,i:i+1] <- str_split_fixed(df[,i], "", 2)
}

这将创建一个垂直填充的矩阵,但不会填充整个列。

显然我做得不对,但我似乎无法修复它(特别是因为我不擅长 for 循环)。有没有什么软件包可以让这件事变得更容易?也许可以修复这个 for 循环?或者有其他方法来分割这个数据框中的数据?任何帮助将不胜感激!

r string split strsplit
1个回答
0
投票

您可以使用 stringr 包中的

str_split_fixed

> library(stringr)
> matrix(sapply(df, str_split_fixed, "", 2), nrow = nrow(df))|>
    as.data.frame()
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1  A  A  A  A  T  T  A  G  C   C
2  A  T  A  A  T  A  G  C  C   C
3  A  A  A  T  T  T  A  G  C   C

样本数据:

structure(list(X1 = c("AA", "AT", "AA"), X2 = c("AA", "AA", "AT"
), X3 = c("TT", "TA", "TT"), X4 = c("AG", "GC", "AG"), X5 = c("CC", 
"CC", "CC")), class = "data.frame", row.names = c(NA, -3L))
© www.soinside.com 2019 - 2024. All rights reserved.