SAPPY或for循环在数据集上应用grepl函数?
我正在寻找一种最优雅的方法来替换数据集32列中的值,目前所有数据都存储为因子。看起来像这样: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的需要是'抵抗','的需
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)