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
我有一个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