我有這樣的數據集:
df<-data.frame(ID=(1:5), cloumn1=c("AA","GG","AG","AA","AT"), cloumn2=c("AA","GG","AG","AA","AT"), stringsAsFactors=FALSE)
df
ID cloumn1 cloumn2
1 AA AA
2 GG GG
3 AG AG
4 AA AA
5 AT AT
我想將每一列分成 2 個字母,以便輸出如下所示:
ID cloumn1.A cloumn1.B cloumn2.A cloumn2.B
1 A A A A
2 G G G G
3 A G A G
4 A A A A
5 A T A T
你能幫我嗎?
library(tidyverse)
df %>%
pivot_longer(-ID) %>%
mutate(tmp = str_split(value, pattern = "")) %>%
unnest(tmp) %>%
group_by(ID, name) %>%
mutate(id_row = LETTERS[row_number()]) %>%
pivot_wider(id_cols = c(ID, name), names_from =c(name, id_row), values_from = tmp, names_sep = ".") %>%
ungroup()
#> # A tibble: 5 x 5
#> ID cloumn1.A cloumn1.B cloumn2.A cloumn2.B
#> <int> <chr> <chr> <chr> <chr>
#> 1 1 A A A A
#> 2 2 G G G G
#> 3 3 A G A G
#> 4 4 A A A A
#> 5 5 A T A T
數據
df <-
data.frame(
ID = (1:5),
cloumn1 = c("AA", "GG", "AG", "AA", "AT"),
cloumn2 = c("AA", "GG", "AG", "AA", "AT"),
stringsAsFactors = FALSE
)
由reprex 包(v2.0.1)於 2021 年 11 月 5 日創建
數據表
library(data.table)
setDT(df)
melt(data = df, id.vars = "ID") %>%
.[, list(value = unlist(strsplit(value, split = ""))), by = list(ID, variable)] %>%
.[, id_row := LETTERS[rowid(ID, variable)]] %>%
dcast(formula = ID ~ variable + id_row, value.var = "value")
ID cloumn1_A cloumn1_B cloumn2_A cloumn2_B
1: 1 A A A A
2: 2 G G G G
3: 3 A G A G
4: 4 A A A A
5: 5 A T A T
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句