我有一个df,我想创建一个函数,如果columnname包含一个特定的characterica,例如'(str)',该函数可以读取和修改整个列。如果columnname包含'(str)',我想在整个列的值的前后粘贴“' %”和“%'”
#create df
y<- data.frame('criteria1' = c('info','1', 'info', '', 'info'), "criteria2.(str)" = c('y','3', '', 'info', ''), "criteria3" = c('y','7', '', 'info', 'info'), check.names=FALSE)
预期结果是:
y1<- data.frame('criteria1' = c('info','1', 'info', '', 'info'), "criteria2.(str)" = c("'%y%'","'%3%'", "'%%'", "'%info%'", "'%%'"), "criteria3" = c('y','7', '', 'info', 'info'), check.names=FALSE)
我试过lapply没有运气
y[]<- lapply(y, function(x)
ifelse(colnames(y)[x] %like% ('(str)'),
paste0("'%",x,"%'"), x))
y[]<- lapply(y, function(x)
ifelse(colnames(y) %like% ('(str)'),
paste0("'%",x,"%'"), x))
与sapply“%x%”一起水平添加,但不是为列添加
y <- sapply(1:ncol(y), function(x)
ifelse(colnames(y) %like% ('.(str)'), paste0("'%",x,"%'"), x))
提前感谢!
2条答案
按热度按时间3df52oht1#
使用data.table和stringr就可以完成这项工作。您可以修改
str_detect()
中的目标列。这个管用吗?
创建于2021-03-04由reprex package(v1.0.0)
ujv3wf0j2#
另一种
data.table
方法基本上与Francesco的答案相同(他的答案有点sonner)...只有列的选择(和粘贴字符串)不同,所以不需要包
stringr
。