R 当特定字符串位于某个变量中时,如何在另一个变量中生成值。(右)
下图是数据帧的第一个头部(10) 这是我想做的。 如果单词“facebook”、“instagram”、“youtube”作为“推荐”包含在“源”变量中,请在“媒体”变量中更改“推荐->社交” 但是,我需要让其他人保持原样,比如有机或直接,即使他们有facebook | instagram | youtube。它需要是只向社会推荐工作,而不是直接和有机的 我想我可以使用if语句也可以使用filter函数..,但我只是被困在这里,不知道从哪里开始。。我想知道这方面的技巧R 当特定字符串位于某个变量中时,如何在另一个变量中生成值。(右),r,dataframe,if-statement,filter,R,Dataframe,If Statement,Filter,下图是数据帧的第一个头部(10) 这是我想做的。 如果单词“facebook”、“instagram”、“youtube”作为“推荐”包含在“源”变量中,请在“媒体”变量中更改“推荐->社交” 但是,我需要让其他人保持原样,比如有机或直接,即使他们有facebook | instagram | youtube。它需要是只向社会推荐工作,而不是直接和有机的 我想我可以使用if语句也可以使用filter函数..,但我只是被困在这里,不知道从哪里开始。。我想知道这方面的技巧 referral2 &l
referral2 <- mutate(referral, medium = ifelse( ))
referral2您可以使用grepl()
测试条件,尝试以下任何选项base R
或dplyr
。您可以为标记设置向量,然后使用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))
最长的方法是像这样为每个标记嵌套条件(它将产生相同的输出):
#更换新变量2
df$medium对于这样的任务,我喜欢将dplyr与stringr
包结合使用。与Duck的“Dplyr”解决方案基本相同:
df$mediumlibrary(stringr);我还有一个问题。当有比源变量更多的值时(例如转介、有机、直接等),我想将“facebook | instagram | youtube”设置为“社交”,仅当这些词作为转介包含在媒体中时,但其他词保持原样。我上传的图片只是其中的一个子集,所以我忘了提到我最初的目的。。谢谢。所以整个过程应该只将“推荐”替换为“社交”,而不要替换媒体中的任何其他值?应该是这样的:df$medium,代码将所有内容更改为引用。。。因此,当值包括“facebook | instagram | youtube”时,推荐应改为社交,但其他值,如organic和direct,即使包含这些词,也不需要改为其他任何值。当媒体为推荐时,如果源变量包括facebook | instagram | youtube,则更容易解释,将媒介变量从“推荐”更改为“社会”
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)))