我有data.frame
很多变量,我想将一个函数-log10(*htotal_pattern*)
应用于一些具有相同名称的变量 pattern htotal_
。即Win_htotal_surf_eez
等Sum_htotal_surf_LME
。
我知道 R 中有一个apply
函数,但想知道是否可以使用变量名中的模式来完成它?正如您可以使用带有list.files
.
我有data.frame
很多变量,我想将一个函数-log10(*htotal_pattern*)
应用于一些具有相同名称的变量 pattern htotal_
。即Win_htotal_surf_eez
等Sum_htotal_surf_LME
。
我知道 R 中有一个apply
函数,但想知道是否可以使用变量名中的模式来完成它?正如您可以使用带有list.files
.
只需用于grepl
匹配要在返回逻辑向量上操作的列名,在[
操作符内对数据帧进行子集化。因为log10
是矢量化的,所以你可以这样做....
df[ , grepl( "htotal_" , names( df ) ) ] <- -log10( df[ , grepl( "htotal_" , names( df ) ) ] )
# Set up the data
df <- data.frame( matrix( sample( c(1,10,1000) , 16 , repl = TRUE ) , 4 , 4 ) )
names( df ) <- c("htotal_1" , "htotal_2" , "not1" , "not2" )
# htotal_1 htotal_2 not1 not2
#1 10 10 10 1000
#2 10 10 1 10
#3 1000 1 1 1000
#4 10 1000 10 1000
df[ , grepl( "htotal_" , names( df ) ) ] <- -log10( df[ , grepl( "htotal_" , names( df ) ) ] )
# htotal_1 htotal_2 not1 not2
#1 -1 -1 10 1000
#2 -1 -1 1 10
#3 -3 0 1 1000
#4 -1 -3 10 1000