将 R 字符串拆分为单个字符
Split R string into individual characters
我认为这应该很简单,但我找不到另一个适用于我的目的的示例。我在 R 的 1 列中有许多 DNA 序列,但我想将它们分成许多列,每列 1 个碱基对。例如:
V
ggggcc
cccctt
tttttt
aaaaaa
我希望它看起来像
V V V V V V
g g g g c c
c c c c t t
t t t t t t
a a a a a a
我试过了
paste(L1HS2, collapse = "")
unlist(strsplit(L1HS2, split = ""))
和
data.frame(str_split_fixed(L1HS2, "", max(nchar(L1HS2))))
但是我丢失了数据帧结构,最后得到了 1 行很长的列。这一定很简单吧?
你可以使用
data.frame(Reduce(rbind, strsplit(df$V1, "")))
这个returns
X1 X2 X3 X4 X5 X6
init g g g g c c
X c c c c t t
X.1 t t t t t t
X.2 a a a a a a
或
data.frame(do.call(rbind, strsplit(df$V1, "")))
哪个returns
X1 X2 X3 X4 X5 X6
1 g g g g c c
2 c c c c t t
3 t t t t t t
4 a a a a a a
您可以使用 tidyr
中的 separate
。
# first the data:
'V1
ggggcc
cccctt
tttttt
aaaaaa' %>% data.table::fread(data.table = FALSE) -> df
sl <- seq_len(nchar(df$V1[1]))
separate(df, V1, paste0('X', sl), sep = sl)
X1 X2 X3 X4 X5 X6
1 g g g g c c
2 c c c c t t
3 t t t t t t
4 a a a a a a
在空字符串 (""
) 上分隔并不能很好地与 separate
一起使用,所以我改为在每个数字位置 separate
。
另一个可能的解决方案:
library(tidyverse)
df <- data.frame(V1 = c("ggggcc", "cccctt", "tttttt", "aaaaaa"))
str_split(df$V1, "", simplify = T) %>% data.frame
#> X1 X2 X3 X4 X5 X6
#> 1 g g g g c c
#> 2 c c c c t t
#> 3 t t t t t t
#> 4 a a a a a a
我认为这应该很简单,但我找不到另一个适用于我的目的的示例。我在 R 的 1 列中有许多 DNA 序列,但我想将它们分成许多列,每列 1 个碱基对。例如:
V
ggggcc
cccctt
tttttt
aaaaaa
我希望它看起来像
V V V V V V
g g g g c c
c c c c t t
t t t t t t
a a a a a a
我试过了
paste(L1HS2, collapse = "")
unlist(strsplit(L1HS2, split = ""))
和
data.frame(str_split_fixed(L1HS2, "", max(nchar(L1HS2))))
但是我丢失了数据帧结构,最后得到了 1 行很长的列。这一定很简单吧?
你可以使用
data.frame(Reduce(rbind, strsplit(df$V1, "")))
这个returns
X1 X2 X3 X4 X5 X6
init g g g g c c
X c c c c t t
X.1 t t t t t t
X.2 a a a a a a
或
data.frame(do.call(rbind, strsplit(df$V1, "")))
哪个returns
X1 X2 X3 X4 X5 X6
1 g g g g c c
2 c c c c t t
3 t t t t t t
4 a a a a a a
您可以使用 tidyr
中的 separate
。
# first the data:
'V1
ggggcc
cccctt
tttttt
aaaaaa' %>% data.table::fread(data.table = FALSE) -> df
sl <- seq_len(nchar(df$V1[1]))
separate(df, V1, paste0('X', sl), sep = sl)
X1 X2 X3 X4 X5 X6 1 g g g g c c 2 c c c c t t 3 t t t t t t 4 a a a a a a
在空字符串 (""
) 上分隔并不能很好地与 separate
一起使用,所以我改为在每个数字位置 separate
。
另一个可能的解决方案:
library(tidyverse)
df <- data.frame(V1 = c("ggggcc", "cccctt", "tttttt", "aaaaaa"))
str_split(df$V1, "", simplify = T) %>% data.frame
#> X1 X2 X3 X4 X5 X6
#> 1 g g g g c c
#> 2 c c c c t t
#> 3 t t t t t t
#> 4 a a a a a a