取消列出数据框列并将其粘贴在一起

HNSKD

我有一个如下定义的数据框:

df <- structure(list(ID = 1:19, MEDICATION = c("0", "NOVOMIX 26 BF, 20 D", 
                                               "NOVOMIX 14 D", "NOVOMIX 34 BF 22 D", "MIXTARD 52 BF 20 D", "MIXTARD 40 BF 24 D", 
                                               "MIXTARD 10 BF 8 D", "MIXTARD 42 BF 24 D", "MIXTARD 20 BF 18 D", 
                                               "MIXTARD 82 BF 46 D", "MIXTARD 14 BF 10 D", "NOVOMIX 15 BF 15 D", 
                                               "MIXTARD", NA, "MIXTARD 10 BF 4 D", "NOVOMIX", "MIXTARD --> NOVOMIX", 
                                               "NOT GIVEN ANY DIABETES MEDICATION INPATIENT PATIENT NORMALLY ON METFORMIN", 
                                               "GIVEN ASPART")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -19L), .Names = c("ID", "MEDICATION"))

我想提取所有药物(即NOVOMIXMIXTARDMETFORMINASPARTMEDICATION在数据帧的变量并粘贴在一起,我写我的代码如下:

library(tidyverse)
library(rebus)
df %>%
      mutate(MEDICATION2 = str_extract_all(MEDICATION, pattern = 
                           or1(c("NOVOMIX", "MIXTARD", "METFORMIN", "ASPART")))) %>%
      unnest(MEDICATION2) %>%
      group_by(ID) %>%
      mutate(MEDICATION2 = str_c(unlist(MEDICATION2), collapse = " - ")) %>%
      slice(1)

我的预期输出是:

df_out <- structure(list(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19), MEDICATION = c("0", "NOVOMIX 26 BF, 20 D", 
"NOVOMIX 14 D", "NOVOMIX 34 BF 22 D", "MIXTARD 52 BF 20 D", "MIXTARD 40 BF 24 D", 
"MIXTARD 10 BF 8 D", "MIXTARD 42 BF 24 D", "MIXTARD 20 BF 18 D", 
"MIXTARD 82 BF 46 D", "MIXTARD 14 BF 10 D", "NOVOMIX 15 BF 15 D", 
"MIXTARD", NA, "MIXTARD 10 BF 4 D", "NOVOMIX", "MIXTARD --> NOVOMIX", 
"NOT GIVEN ANY DIABETES MEDICATION INPATIENT PATIENT NORMALLY ON METFORMIN", 
"GIVEN ASPART"), MEDICATION2 = c(NA, "NOVOMIX", "NOVOMIX", "NOVOMIX", 
"MIXTARD", "MIXTARD", "MIXTARD", "MIXTARD", "MIXTARD", "MIXTARD", 
"MIXTARD", "NOVOMIX", "MIXTARD", NA, "MIXTARD", "NOVOMIX", "MIXTARD - NOVOMIX", 
"METFORMIN", "ASPART")), .Names = c("ID", "MEDICATION", "MEDICATION2"
), row.names = c(NA, -19L), class = "data.frame")

问题是代码删除了行,MEDICATION == 0我认为我的代码对于简单提取字符串来说太长了。如果您知道如何缩短此代码(如果可能),我想寻求帮助。

罗纳克·沙

我们可以stri_extract_all_regexstringi包中提取与模式匹配的所有单词。

library(stringi)
med_pattern <- c("NOVOMIX|MIXTARD|METFORMIN|ASPART")
df$MEDICATION2 <- stri_extract_all_regex(df$MEDICATION, pattern = med_pattern)

如@ mt1022所述,新列是一个列表。我们可能paste与他们在一起

df$MEDICATION2<-paste(stri_extract_all_regex(df$MEDICATION,pattern = med_pattern)) 

但是,对于包含1个以上元素的列表,它不会给出一些不需要的字符。这应该给您预期的输出。

chars <- stri_extract_all_regex(df$MEDICATION, pattern = med_pattern)
df$MEDICATION2 <- sapply(chars, paste, collapse = "-")
df$MEDICATION2

#[1] "NA"              "NOVOMIX"         "NOVOMIX"         "NOVOMIX"        
#[5] "MIXTARD"         "MIXTARD"         "MIXTARD"         "MIXTARD"        
#[9] "MIXTARD"         "MIXTARD"         "MIXTARD"         "NOVOMIX"        
#[13] "MIXTARD"         "NA"              "MIXTARD"         "NOVOMIX"        
#[17] "MIXTARD-NOVOMIX" "METFORMIN"       "ASPART" 

您也可以单行执行此操作:

df$MEDICATION2 <- sapply(stri_extract_all_regex(df$MEDICATION, 
                         pattern = med_pattern), paste, collapse = "-")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除数字之间的空格,而无需将单独的浮点数粘贴在一起

将多列粘贴在一起

用表达式命令将两个向量粘贴在一起

R:根据索引列表将一些字符串向量元素粘贴在一起

在将多个列值粘贴在一起时,如何省略NA值?

R将矩阵单元格粘贴在一起

将子集列粘贴在一起

加快R for循环以将多个变量粘贴在一起

Python-从cvs文件创建数据框并将这些数据框合并在一起

将列粘贴在一起而NA不会成为字符

如何根据条件将向量元素与上一个元素粘贴在一起

如何通过将令牌粘贴在一起来创建类似函数的宏令牌

如何在R环境中将所有对象粘贴在一起?

有条件地将字符串粘贴在一起

将符合模式名称的字符串粘贴在一起,并忽略NA

循环执行功能并将Pandas数据框绑定在一起

将唯一标识符粘贴在一起

您如何分离粘贴在一起的两个不同的表?

如何使用单个空格作为分隔符将多个文件粘贴在一起

吐出字符串然后将其粘贴在一起

如何仅使用 css 将此图像和评论 div 粘贴在一起?

VBA 将值和 ColumnWidths 复制和粘贴在一起

使用文件名作为位置将图像粘贴在一起

创建一个主列堆叠在一起的数据框

通过将因子内的级别粘贴在一起来折叠数据框

如何选择`selectInput()`作为数据框中的元素,这些元素粘贴在一起,用“|”分隔 并对齐?

将2个不同长度列表的值粘贴在一起

将多列粘贴在一起并编号

如何在 SQL 查询中将表值结果粘贴在一起?