【问题标题】:If (no else)-sentences with substring in R如果(没有其他)-R 中带有子字符串的句子
【发布时间】:2020-12-19 19:37:12
【问题描述】:

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

提前致谢!

【问题讨论】:

  • frank 会发生什么?它是否保持原样,或者您期望frank 的输出是什么?
  • 我已经添加了预期的输出(但可以在下面看到你想通了:))

标签: r dataframe if-statement substring


【解决方案1】:

您可以尝试使用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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2021-12-28
    • 2015-12-11
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多