基于Tidyverse中另一列的行元素替换列中的行元素 [英] Replacing row elements in a column based on row elements from another column in Tidyverse
本文介绍了基于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
)
)
您也可以使用ifelse
和grepl
-
df$Group1 <- ifelse(grepl("IOT", df$Group3), "IOT",
ifelse(grepl("M2M", df$Group3), "M2M", df$Group1)
)
这篇关于基于Tidyverse中另一列的行元素替换列中的行元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文