首页 > 解决方案 > 提取一个字母并将其放在 R 中的一个单独的列中

问题描述

我有这样的数据集:

df<-data.frame(ID=(1:5), column1=c("AA","GG","AG","AA","AT"), column2=c("AA","GG","AG","AA","AT"), stringsAsFactors=FALSE)
df

ID column1 column2
 1      AA      AA
 2      GG      GG
 3      AG      AG
 4      AA      AA
 5      AT      AT

我想将每一列分成 2 个字母,所以输出看起来像这样:

ID column1.A column1.B column2.A column2.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

你能帮我吗?

标签: r

解决方案


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 column1.A column1.B column2.A column2.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),
    column1 = c("AA", "GG", "AG", "AA", "AT"),
    column2 = c("AA", "GG", "AG", "AA", "AT"),
    stringsAsFactors = FALSE
  )

reprex 包于 2021-11-05 创建(v2.0.1)

数据表

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 column1_A column1_B column2_A column2_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

推荐阅读