如果(没有其他)-R 中带有子字符串的句子

If (no else)-sentences with substring in R

我有一个 df,我想对 screen_name 列中所有列的第一个字母进行子字符串化,名称为 'frank' 的单元格除外。 R 忽略了我所有的尝试(子字符串在所有单元格上执行)。为什么?


df <- data.frame("screen_name" = c("august", "berit", "christopher", "david", "erica", "frank"), "rt_name" = c("berit", "august", "david", "erica", "frank", "christopher"))

#IF-sentence with '%!like%' 
'%!like%' <- function(x,y)!('%like%'(x,y))
df$screen_name<- if(df$screen_name %!like% ('frank')) {substr(df$screen_name, 1, 2)}

#IF-sentence with !=
df$screen_name<- if(df$screen_name != 'frank') {substr(df$screen_name, 1, 2)}

我正在寻找包含 %!like% 或类似内容的解决方案,因为 df 中的名称可能会有所不同,而且我并不总是完全匹配。

我的预期输出是

df_exp <- data.frame("screen_name" = c("au", "be", "ch", "da", "er", "frank"), "rt_name" = c("berit", "august", "david", "erica", "frank", "christopher"))

提前致谢!

您可以尝试使用 ifelse 结合 grepl 来检查输入的屏幕名称是否恰好是 frank:

df$screen_name <- ifelse(!grepl("^frank$", df$screen_name),
                         substr(df$screen_name, 1, 2), df$screen_name)
df

  screen_name     rt_name
1          au       berit
2          be      august
3          ch       david
4          da       erica
5          er       frank
6       frank christopher

数据:

df <- data.frame(screen_name = c("august", "berit", "christopher", "david",
                                 "erica", "frank"),
                 rt_name = c("berit", "august", "david", "erica", "frank",
                             "christopher"), stringsAsFactors=FALSE)