Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 当特定字符串位于某个变量中时,如何在另一个变量中生成值。(右)_R_Dataframe_If Statement_Filter - Fatal编程技术网

R 当特定字符串位于某个变量中时,如何在另一个变量中生成值。(右)

R 当特定字符串位于某个变量中时,如何在另一个变量中生成值。(右),r,dataframe,if-statement,filter,R,Dataframe,If Statement,Filter,下图是数据帧的第一个头部(10) 这是我想做的。 如果单词“facebook”、“instagram”、“youtube”作为“推荐”包含在“源”变量中,请在“媒体”变量中更改“推荐->社交” 但是,我需要让其他人保持原样,比如有机或直接,即使他们有facebook | instagram | youtube。它需要是只向社会推荐工作,而不是直接和有机的 我想我可以使用if语句也可以使用filter函数..,但我只是被困在这里,不知道从哪里开始。。我想知道这方面的技巧 referral2 &l

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

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

但是,我需要让其他人保持原样,比如有机或直接,即使他们有facebook | instagram | youtube。它需要是只向社会推荐工作,而不是直接和有机的

我想我可以使用if语句也可以使用filter函数..,但我只是被困在这里,不知道从哪里开始。。我想知道这方面的技巧

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$medium
library(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)))