r - R中的剪切函数替代

标签 r regex dplyr

我有一些数据的形式:

Person.ID    Household.ID    Composition 
   1             4593           1A_0C
   2             4992           2A_1C
   3             9843           1A_1C 
   4             8385           2A_2C  
   5             9823           8A_1C 
   6             3458           1C_9C 
   7             7485           2C_0C 
   :               :              :    

我们可以将组合变量视为成人/ child 的数量,即 2A_1C 相当于两个成人和两个 child 。

我想做的是减少可能的构图层次。对于第 5 个人,我们有 8A_1C 的组成,我正在寻找一种方法将其减少到 4+A_0C。因此,例如,对于任何大于 4A 的成分值,我们都会有 4+。

Person.ID     Household.ID     Composition 
    5             9823            4+A_1C
    6             3458             1A_4+C
    :               :                :

我不确定如何在 R 中执行此操作,我正在考虑使用 dyplyr 中的 filter()select()。否则我需要使用某种正则表达式。

如有任何帮助,我们将不胜感激。谢谢

最佳答案

数据:

Person.ID <- c(1,2,3,4,5,6,7,8)
Household.ID <- c(4593,4992,9843,8385,9823,3458,7485)
Composition <- c("1A_0C","2A_1C","1A_1C","2A_2C","8A_1C","1A_9C","2A_0C")
dat <- tibble(Person.ID, Household.ID, Composition)

功能:

above4 <- function(f){
    ff <- gsub("[^0-9]","",f)
    if(ff>4){return("4+")}
    if(ff<=4){return(ff)}
}

应用函数(在分离的数据上完成,但之后可以重新组合):

dat_ <- dat %>% tidyr::separate(., col=Composition, 
                           into=c("Adults", "Children"), 
                           sep="_") %>%
        dplyr::mutate(Adults_ = unlist(lapply(Adults,above4)), 
                         Children_ = unlist(lapply(Children,above4)))

然后您可以使用 select、filter 来获取所需的数据集。

dat_ %>% dplyr::mutate(Composition_ = paste0(Adults_, "A_", Children_, "C")) %>%
         dplyr::select(Person.ID, Household.ID, Composition=Composition_)

 # A tibble: 7 x 3
      Person.ID Household.ID Composition
          <dbl>        <dbl> <chr>
    1        1.        4593. 1A_0C
    2        2.        4992. 2A_1C
    3        3.        9843. 1A_1C
    4        4.        8385. 2A_2C
    5        5.        9823. 4+A_1C
    6        6.        3458. 1A_4+C
    7        7.        7485. 2A_0C

关于r - R中的剪切函数替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54331582/

相关文章:

r - 使用 id 匹配和替换因子值

使用if语句和相似数量的样本进行R采样

r - 无法使用 ggtree 绘制 hclust 对象

r - `write.dbf` 因类 `tbl_df` 的对象而失败

r - 数据集中每组的样本数不同

r - downloadHandler在使用R Shiny下载图像时出错

javascript - 在正则表达式中组合 AND 和 OR 运算符

regex - 正则表达式: searching an arbitrary file for MD5

regex - re.search AND 链接多个条件,python3

r - 在 R 中分组和按行自定义排列