如何将数据因子划分为R中的子集

Posted

技术标签:

【中文标题】如何将数据因子划分为R中的子集【英文标题】:How to divide a data factor into subsets in R 【发布时间】:2022-01-09 05:55:15 【问题描述】:

我有一个像这样的因子列

id               
2000.1.ABC0123
2010.11.BCD3652   

逻辑是“年”“月”和“标识符” 我只是想将它们纠缠成两列,其中我需要一个数字月份,前面有一个“0”,如下所示。

Identifier     yearmonth    
AB0123         200001 
BCD3652        201011  

我玩过“paste0”和“substra”,但无法使用。

非常感谢任何帮助。

谢谢,最好的, D.

【问题讨论】:

类似这样的 str_split('2000.1.ABC0123',pattern = "\\.(?![:digit:])") 【参考方案1】:

在基础 R 中:

read.table(text=df$id, sep='.', col.names = c('year', 'month', 'Identifier')) |>
  transform(yearmonth = sprintf("%d%02d", year, month))

  year month Identifier yearmonth
1 2000     1    ABC0123    200001
2 2010    11    BCD3652    201011

Tidyverse:

df %>%
  separate(id, c('year', 'month', 'Identifier'), convert = TRUE) %>%
  mutate(month = sprintf('%02d', month)) %>%
  unite('yearmonth', year, month, sep='')

yearmonth Identifier
  <chr>     <chr>     
1 200001    ABC0123   
2 201011    BCD3652

【讨论】:

【参考方案2】:

这里是一个使用 stringr 和 dplyr 的例子

library(tidyverse)

df_example <- tribble(~id,
                      '2000.1.ABC0123',
                      '2010.11.BCD3652')


df_example |> 
  mutate(split_cols = str_split(id,pattern = "\\.(?![:digit:])"),
         yearmonth  = split_cols |> map_chr(pluck(1)) |>  str_remove('\\.'),
         Identifier =  split_cols |> map_chr(pluck(2))
         )
#> # A tibble: 2 x 4
#>   id              split_cols yearmonth Identifier
#>   <chr>           <list>     <chr>     <chr>     
#> 1 2000.1.ABC0123  <chr [2]>  20001     ABC0123   
#> 2 2010.11.BCD3652 <chr [2]>  201011    BCD3652

由reprex package (v2.0.1) 于 2021-12-02 创建

【讨论】:

【参考方案3】:

strsplit 和 sprintf 的组合应该可以为您提供所需的输出。

x = unlist(strsplit('2000.1.ABC0123', split='\\.'))
y = as.numeric(x[1:2])
sprintf('%4d%02d', y[1], y[2])
x[3]

【讨论】:

【参考方案4】:
library(data.table)
DT <- fread("id               
2000.1.ABC0123
2010.11.BCD3652 ")

DT[, c("year", "month", "Identifier") := tstrsplit(id, ".", fixed = TRUE)]
DT[, yearmonth := paste0(year, sprintf("%02d", as.numeric(month)))]
#                 id year month Identifier yearmonth
# 1:  2000.1.ABC0123 2000     1    ABC0123    200001
# 2: 2010.11.BCD3652 2010    11    BCD3652    201011

【讨论】:

以上是关于如何将数据因子划分为R中的子集的主要内容,如果未能解决你的问题,请参考以下文章

R语言数据预处理把类型变量转化为因子变量,把数据集转化为h2o格式数据集划分(训练集测试集验证集)

将多个分类变量转换为R中的因子

R语言专题,如何使用party包构建决策树?

Kruskal - 具有 R 的数据子集的 Wallis p 值矩阵

一个因子的 addNA 之后的子集数据帧

将数据框组合在同一个图中 R 中的条形图和点图