首页 > 解决方案 > 当特定字符串在某个变量中时,如何在另一个变量中赋值。(在 R 中)

问题描述

下图是数据帧的第一个头(10)。

在此处输入图像描述

这就是我想做的。如果单词“facebook”、“instagram”、“youtube”作为“推荐”包含在“来源”变量中,则在“中”变量中更改推荐 -> 社交。

但是,即使他们在字符串中有 facebook|instagram|youtube,我也需要让其他人保持有机或直接的状态。它需要的工作只是转介到社会,而不是直接和有机的。

我想我可以使用 if 语句也过滤功能..,但我只是被困在这里,不知道从哪里开始.. 我想知道这方面的技术。

referral2 <- mutate(referral, medium = ifelse( ))

谢谢..!

标签: rdataframeif-statementfilter

解决方案


您可以尝试任何这些选项base Rdplyr用于grepl()测试条件。您可以为您的标签设置一个向量,然后使用grepl()paste0()检查巧合并根据需要分配值medium。我模拟了一些数据。下次请附上您的数据样本而不是屏幕截图,因为数据很大时我们很难复制。这里的代码:

library(dplyr)
set;seed(123)
#Data
df <- data.frame(source=c('facebook','linkedin','Other','Myfacebook',
                          'Myyoutube','instagram','myinstagram'),
                 medium=rep('referral',7),
                 newuser=round(runif(7,1000,24000)),stringsAsFactors = F)
#Vector of keys
vec <- c("facebook" ,"instagram","youtube")
#Replace new variable
df$medium <- ifelse(grepl(paste0(vec,collapse = '|'),df$source,ignore.case = T),'social',df$medium)
#Dplyr
df <- df %>% mutate(medium=ifelse(grepl(paste0(vec,collapse = '|'),source,ignore.case = T),
                            'social',medium))

输出:

       source   medium newuser
1    facebook   social   16354
2    linkedin referral   18804
3       Other referral   17855
4  Myfacebook   social   12405
5   Myyoutube   social   14625
6   instagram   social   18539
7 myinstagram   social    4299

最长的方法是像这样为每个标签嵌套条件(它将产生相同的输出):

#Replace new variable2
df$medium <- ifelse(grepl("facebook",df$source,ignore.case = T),
                    "social",ifelse(grepl("instagram",df$source,ignore.case = T),
                                    "social",ifelse(grepl("youtube",df$source,ignore.case = T),"social",df$medium)))

但从我的角度来看grepl(),它更好地使用。paste0()


推荐阅读