2

我有data.frame很多变量,我想将一个函数-log10(*htotal_pattern*)应用于一些具有相同名称的变量 pattern htotal_。即Win_htotal_surf_eezSum_htotal_surf_LME

我知道 R 中有一个apply函数,但想知道是否可以使用变量名中的模式来完成它?正如您可以使用带有list.files.

4

1 回答 1

3

只需用于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
于 2013-08-27T14:33:06.233 回答