问题描述
我有一个df,我想为screen_name列中所有列的首字母加上子串,但名称为'frank'的单元格除外。我的所有尝试都被R忽略(子字符串在所有单元格上执行)。为什么?
df <- data.frame("screen_name" = c("august","berit","christopher","david","erica","frank"),"rt_name" = c("berit","august","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,2)}
我正在寻找包含%!like%或相似名称的解决方案,因为df中的名称可能会有所不同,而且我并不总是完全匹配。
我的预期输出是
df_exp <- data.frame("screen_name" = c("au","be","ch","da","er","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","frank","christopher"),stringsAsFactors=FALSE)