R:如何使用列名中的信息修改df中的整个列

R:如何使用列名中的信息修改df中的整个列,r,if-statement,apply,columnname,linux-df,R,If Statement,Apply,Columnname,Linux Df,我有一个df,我想创建一个函数,如果ColumnName包含一个特定的特征,例如“str”,则该函数可以读取和修改整个列。如果columnname包含“(str)”,我希望在整列中的值之前和之后粘贴“%”和“%” #create df y<- data.frame('criteria1' = c('info','1', 'info', '', 'info'), "criteria2.(str)" = c('y','3', '', 'info', ''), "c

我有一个df,我想创建一个函数,如果ColumnName包含一个特定的特征,例如“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)

#创建df

y使用数据。table将完成这项工作。您可以在
str\u detect()
中修改目标列

这行吗

库(data.table)
图书馆(stringr)
y 1:信息“%y%”y
#> 2:         1           '%3%'         7
#>3:信息“%”
#>4:“%info%”信息
#>5:信息“%”信息

由(v1.0.0)

使用数据于2021-03-04创建。表和字符串将完成此工作。您可以在
str\u detect()
中修改目标列

这行吗

库(data.table)
图书馆(stringr)
y 1:信息“%y%”y
#> 2:         1           '%3%'         7
#>3:信息“%”
#>4:“%info%”信息
#>5:信息“%”信息

由(v1.0.0)创建于2021-03-04

基本上与弗朗西斯科的回答相同(他的回答有点索纳)。。。只有列(和粘贴字符串)的选择不同,因此不需要包
stringr

library( data.table )
setDT(y)
cols <- grep( "\\(str\\)", names(y), value = TRUE )
#update
y[, (cols) := lapply( .SD, function(x) paste0( "%", x, "%" ) ), .SDcols = cols ][]

#    criteria1 criteria2.(str) criteria3
# 1:      info             %y%         y
# 2:         1             %3%         7
# 3:      info              %%          
# 4:                    %info%      info
# 5:      info              %%      info
库(data.table)
setDT(y)

cols另一种
数据表
方法

基本上与弗朗西斯科的回答相同(他的回答有点索纳)。。。只有列(和粘贴字符串)的选择不同,因此不需要包
stringr

library( data.table )
setDT(y)
cols <- grep( "\\(str\\)", names(y), value = TRUE )
#update
y[, (cols) := lapply( .SD, function(x) paste0( "%", x, "%" ) ), .SDcols = cols ][]

#    criteria1 criteria2.(str) criteria3
# 1:      info             %y%         y
# 2:         1             %3%         7
# 3:      info              %%          
# 4:                    %info%      info
# 5:      info              %%      info
库(data.table)
setDT(y)
科尔斯
y <- sapply(1:ncol(y), function(x) 
  ifelse(colnames(y) %like% ('.(str)'),  paste0("'%",x,"%'"),  x))
library( data.table )
setDT(y)
cols <- grep( "\\(str\\)", names(y), value = TRUE )
#update
y[, (cols) := lapply( .SD, function(x) paste0( "%", x, "%" ) ), .SDcols = cols ][]

#    criteria1 criteria2.(str) criteria3
# 1:      info             %y%         y
# 2:         1             %3%         7
# 3:      info              %%          
# 4:                    %info%      info
# 5:      info              %%      info