R 中的数据帧中包含 OR 的 IF 语句

IF-statements containing OR in a dataframe in R

我有一个DF。如果 'name1' 列不为空或不包含特定值(例如 christopher),我想粘贴一些信息。如果该列包含空白值或 'christopher' 我希望保留这些值。

我尝试过将不同的 if-else 句子与 OR 结合使用,其中 none 使我得到了想要的结果。因为 DF 中的名称可能不同,我正在寻找 %like% 解决方案或类似解决方案而不是完全匹配(空白值除外)

df <- data.frame("name1" = c("august", "", "christopher", "david", "erica", ""), "name2" = c("berit", "august", "david", "erica", "frank", "christopher"), stringsAsFactors = F)

#IF-ELSE sentence with '%!like%'
'%!like%' <- function(x,y)!('%like%'(x,y))
df$name1 <- ifelse(df$name1 !=''  |  df$name1 %!like% ('christopher') ,paste('Something to be pasted'), df$name1)

#Nested IF-ELSE sentence with '%!like%'
df$name1 <- ifelse(df$name1 =='', '', 
       ifelse(df$name1 %!like% ('christopher') | df$name1 !='' , paste('Something to be pasted'),
       ifelse(df$name1 %!like% ('christopher'),df$name1))

我的预期结果是

df_exp <- data.frame("name1" = c("Something to be pasted", "", "christopher", "Something to be pasted", "Something to be pasted", ""), "name2" = c("berit", "august", "david", "erica", "frank", "christopher"))

我建议对您的代码稍作修改。使用 grepl() 产生的逻辑值可以在其他函数中更好地理解:

#Data
df <- data.frame("name1" = c("august", "", "christopher", "david", "erica", ""), "name2" = c("berit", "august", "david", "erica", "frank", "christopher"), stringsAsFactors = F)

#IF-ELSE
df$name1 <- ifelse(df$name1 =='', '', 
                   ifelse(grepl('christopher',df$name1)==F & df$name1 !='' , paste('Something to be pasted'),
                          df$name1))

输出:

                   name1       name2
1 Something to be pasted       berit
2                             august
3            christopher       david
4 Something to be pasted       erica
5 Something to be pasted       frank
6                        christopher