SAPPY或for循环在数据集上应用grepl函数?

SAPPY或for循环在数据集上应用grepl函数?,r,function,R,Function,我正在寻找一种最优雅的方法来替换数据集32列中的值,目前所有数据都存储为因子。看起来像这样: GENT CIP LEVO CB CT CTX 138 145 R S 156 S S S 161 S S S 173 正如你所看到的,有R的,s的,和大量的空间…R的需要是'抵抗','的需

我正在寻找一种最优雅的方法来替换数据集32列中的值,目前所有数据都存储为因子。看起来像这样:

   GENT CIP LEVO CB CT CTX
138                        
145        R          S    
156    S   S    S          
161    S   S    S          
173                        
正如你所看到的,有R的,s的,和大量的空间…R的需要是'抵抗','的需要是'敏感',空间需要保持原样

以下内容对于单个变量非常有效(感谢那些回答我最后一个问题的人提供了这一点!!):

并收到以下消息


如果数据与我创建的数据相似,并且假设每个列只有三个级别(
R
S
、和
'
),则
[中存在错误(3:33)

或者一个可能更快的选项是使用
for
循环并设置

setDT(drugs)
for(j in 3:33){
  set(drugs, i=NULL, j=j, value= factor(drugs[[j]], levels=c('', 'S', 'R'),
          labels=c('', 'SENSITIVE', 'RESISTANT')))
 }
数据
set.seed(35)

m1使用
dplyr
tidyr
可以通过以下两种方式之一实现:

1) tidyr::gather()将要重新编码名称的列分为两列,
,如上所述重新编码
变量,然后使用tidyr::spread()将值分散回单独的列中

2) 使用函数dplyr::mutate_each()


如果您想要使用这两种方法中的一种或两种方法的示例代码,请告诉我。希望知道这两种简单的方法对您很有帮助,使用这两种方法只需几分钟即可获得所需的输出。

更新了文章。请检查这是否有效。
drugs[2:33]<-ifelse(drugs[3:33] == 'R', 'RESISTANT', ifelse(drugs[3:33] == 
'S', 'SENSITIVE', ifelse(drugs[3:33] == "", "", "")))
 drugs[3:33] <-  ifelse(drugs[3:33] =='R', 'RESISTANT', 
                    ifelse(drugs[3:33]=='S', 'SENSITIVE', ''))
 drugs[,3:33] <- `dim<-`(factor(as.matrix(drugs[3:33]), 
     levels=c('', 'S', 'R'), labels=c('', 'SENSITIVE', 'RESISTANT')),
                   dim(drugs2[3:33]))
library(data.table)
setDT(drugs)[, 3:33 := lapply(.SD, function(x) factor(x, 
    levels=c('', 'S', 'R'), labels=c('', 'SENSITIVE', 'RESISTANT'))),
       .SDcols=3:33][]
setDT(drugs)
for(j in 3:33){
  set(drugs, i=NULL, j=j, value= factor(drugs[[j]], levels=c('', 'S', 'R'),
          labels=c('', 'SENSITIVE', 'RESISTANT')))
 }
set.seed(35)
m1 <- matrix(sample(c('R', 'S', ''), 10*31, replace=TRUE), ncol=31)
drugs <- data.frame(id=1:10, Someval=rnorm(10), m1)