基于Tidyverse中另一列的行元素替换列中的行元素 [英] Replacing row elements in a column based on row elements from another column in Tidyverse

查看:11
本文介绍了基于Tidyverse中另一列的行元素替换列中的行元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,这是我在堆栈溢出中的第一篇帖子,如果格式不正确,如果以前有人问过这个问题,我深表歉意-我还没有找到解决方案。

我正在尝试根据另一列中的特定条件替换另一列中的特定字符串。我有以下数据框:

> df
# A tibble: 14 x 3
   Group1         Group2          Group3               
   <chr>          <chr>           <chr>                
 1 MOBILES        MOBILES - CORE  IOT                  
 2 MOBILES        MOBILES - CORE  IOT_Vas                  
 3 MOBILES        MOBILES - CORE  IOT_Vas              
 4 Data & IP      Data & IP       IP WAN               
 5 Data & IP      Data & IP       Internet Solutions   
 6 Data & IP      Data & IP       Internet Solutions   
 7 MOBILES        IOT             M2M                  
 8 MOBILES        IOT             M2M                  
 9 MOBILES        IOT             M2M VAS              
10 MOBILES        IOT             M2M VAS              
11 Cloud Services Cloud Services  Professional Services
12 Cloud Services Cloud Services  Professional Services
13 Mobiles        MOBILES - CORE  MOBILES - CORE       
14 Mobiles        MOBILES - Voice MOBILES - Voice 
我试图实现的是,如果"Group 3"包含字符串IOT,则"Group 1"中的值=IOT,如果"Group 3"包含M2M,则值"Group 1"=M2M。否则,组1中的值保持不变。

我是相对较新的堆栈溢出和R tidyverserse,但我无法找到问题的解决方案。我已经尝试了str_place和matate_at,但是当我基于两个不同的元素进行替换时,我还不能想出如何做到这一点。

生成的数据框应如下所示:

> df
# A tibble: 14 x 3
   Group1         Group2          Group3               
   <chr>          <chr>           <chr>                
 1 IOT            MOBILES - CORE  IOT                  
 2 IOT            MOBILES - CORE  IOT                  
 3 IOT            MOBILES - CORE  IOT_Vas              
 4 Data & IP      Data & IP       IP WAN               
 5 Data & IP      Data & IP       Internet Solutions   
 6 Data & IP      Data & IP       Internet Solutions   
 7 M2M            IOT             M2M                  
 8 M2M            IOT             M2M                  
 9 M2M            IOT             M2M VAS              
10 M2M            IOT             M2M VAS              
11 Cloud Services Cloud Services  Professional Services
12 Cloud Services Cloud Services  Professional Services
13 Mobiles        MOBILES - CORE  MOBILES - CORE       
14 Mobiles        MOBILES - Voice MOBILES - Voice

推荐答案

tidyverse-

df %>% 
  mutate(
    Group1 = case_when(
      str_detect(Group3, "IOT") ~ "IOT",
      str_detect(Group3, "M2M") ~ "M2M",
      TRUE ~ Group1
    )
  )

您也可以使用ifelsegrepl-

在基数R中执行此操作
df$Group1 <- ifelse(grepl("IOT", df$Group3), "IOT",
                    ifelse(grepl("M2M", df$Group3), "M2M", df$Group1)
                    )

这篇关于基于Tidyverse中另一列的行元素替换列中的行元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆