我有一个如下形式的 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 循环?或者有其他方法来分割这个数据框中的数据?任何帮助将不胜感激!
您可以使用 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))