r - 提取一个字母并将其放在 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
你能帮我吗?
解决方案
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
推荐阅读
- excel - 从不同工作簿运行宏时的不同范围结果
- reactjs - TypeScript 错误 2304:找不到名称 'div' - CRA TypeScript 模板
- tensorflow - 为什么 keras theano 后端优于 tensorflow?
- r - 对象:编织 rmd 时未找到“DF”
- javascript - Javascript函数在完成后调用提交
- postgresql - 在 PGAdmin 工具的过程中编写复制命令的正确语法
- amazon-web-services - AWS Quicksight 登录失败
- c# - Xamarin Forms 中的自定义控件不起作用
- r - mutate_at(或cross)和ifelse语句
- graphql - Apollo GraphQL 自定义数据源设置默认过滤器