【发布时间】:2020-09-01 16:55:08
【问题描述】:
我有一个 DF。如果“name1”列不为空或不包含特定值(例如 christopher),我想粘贴一些信息。如果该列包含空白值或“christopher”,我希望保留这些值。
我尝试过结合 OR 的不同 if-else 语句,但没有一个能引导我达到预期的结果。因为 DF 中的名称可能不同,所以我正在寻找 %like%-solution 或类似的解决方案,而不是完全匹配(空白值除外)
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"))
【问题讨论】:
-
粘贴可用于将东西粘在一起,例如,
paste("a", "b")给出"a b"。如果你只有一件事,paste('Something to be pasted')写'Something to be pasted'的路还很长。 -
我知道,只是为了让这个问题看起来不那么无聊????
-
无需不必要地使您的问题复杂化。它会分散你的逻辑陈述的真正问题。
-
我想也许你想要
&而不是|?让我们谈谈您使用felse(df$name1 =='', '', ifelse(df$name1 %!like% ('christopher') | df$name1 !=''完成的工作首先,如果名称为空白,则它保持空白,好吧。接下来,如果名称不是 Christopher 或,如果它不是空白,则它变为'Something to be pasted'。你为什么在第二个ifelse()中检查不是空白!= ''- 所有空白都已被第一个捕获。正因为如此,剩下的所有内容都不是空白的,所以无论xxx是什么,xxx | df$name1 != ''都将始终为真。
标签: r dataframe if-statement paste