r - 当特定字符串在某个变量中时,如何在另一个变量中赋值。(在 R 中)
问题描述
下图是数据帧的第一个头(10)。
这就是我想做的。如果单词“facebook”、“instagram”、“youtube”作为“推荐”包含在“来源”变量中,则在“中”变量中更改推荐 -> 社交。
但是,即使他们在字符串中有 facebook|instagram|youtube,我也需要让其他人保持有机或直接的状态。它需要的工作只是转介到社会,而不是直接和有机的。
我想我可以使用 if 语句也过滤功能..,但我只是被困在这里,不知道从哪里开始.. 我想知道这方面的技术。
referral2 <- mutate(referral, medium = ifelse( ))
谢谢..!
解决方案
您可以尝试任何这些选项base R
或dplyr
用于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()
推荐阅读
- angular - 找不到管道“ngrxPush”
- oracle - Windows 重新安装后如何恢复 Oracle 19c
- oracle - 重叠日期 Oracle
- typescript - 我们可以模拟泛型参数的“默认参数”吗?
- python - 使用批处理文件在 python 中获取用户输入
- java - 不使用局部变量时无法推断比较器的类型参数
- matlab - 将jpg文件名添加到列表框中并选择一个观看 - Matlab
- python - conditional vectorized calculation with numpy arrays without using direct masking
- clojure - 在 Spacemacs 中将依赖项添加到 deps.edn
- typescript - 如何让 Typescript 识别使用 Lit-Element 中的“get properties()”方法创建的属性?