如何将字符串匹配映射到缺少值的二维数据集中的变量

我想将字符串匹配映射到具有缺失值的二维数据集的变量。

如果有使用map_df或其他向量化方法的解决方案,我会很感兴趣。

输入:

list(
  c(a = "72 a",b = "74 c"),c(a = "12 a",b = "146 d"),c(a = "24 a",bb = "145 c",cx = "14 d")
)

所需的输出:

[[1]]
match1 match2 match3 
    72     74     NA 
[[2]]
match1 match2 match3 
    12    NA     146 
[[3]]
match1 match2 match3 
    24    145     14 

如您所见,“ a”与match1匹配, “ c”匹配到match2和 “ d”匹配到match3。

我尝试过的事情:

library(magrittr)
library(purrr)
l %>% map_df(~list(
  match1 = ifelse(
    test = grepl(pattern = " a",x = .),yes = gsub(pattern = " a",replacement = "",no = NA
  ),match2 = ifelse(
    test = grepl(pattern = " c",yes = gsub(pattern = " c",match3 = ifelse(
    test = grepl(pattern = " d",yes = gsub(pattern = " d",no = NA
  )
))
hhuomjk08 回答:如何将字符串匹配映射到缺少值的二维数据集中的变量

好吧,对于您的特定用例,您可以这样做:

您的输入:

l <- list(
   c(a = "72 a",b = "74 c"),c(a = "12 a",b = "146 d"),c(a = "24 a",bb = "145 c",cx = "14 d")
)

代码(带有tidyr :: pivot_wider):

library(tidyverse)
d <- map_dfr(l,~tibble(value = .x),.id = "id") %>%
   mutate(
    case = case_when(
     grepl(" a",value) ~ "match1",grepl(" c",value) ~ "match2",grepl(" d",value) ~ "match3"
   ),value = gsub(" a| c| d","",value)
   ) %>%
  pivot_wider(id_cols = id,names_from = case,values_from = value)

更新代码(使用tidyr :: spread):

library(tidyverse)
d <- map_dfr(l,.id = "id") %>%
  mutate(
    case = case_when(
      grepl(" a",value)
  ) %>%
  spread(case,value)

尽管价差已停用,所以您可能希望在某个时候切换到ivot_wider / pivot_longer语法。

您的输出是一个包含列match1,match2和match3的数据帧

# A tibble: 3 x 4
id    match1 match2 match3
<chr> <chr>  <chr>  <chr> 
1 1     72     74     NA    
2 2     12     NA     146   
3 3     24     145    14    
本文链接:https://www.f2er.com/3170126.html

大家都在问