我需要将转换应用于大型数据帧的所有数值变量。数据框也包含其他类型的变量。我最初的想法是遍历所有列,检查它们是否为数字,然后将它们除以1000.
我在我的代码中遇到了一个函数,请点击这里的一些指示:
transformDivideThousand <- function(data_frame){
for(i in ncol(data_frame)){
if (is.numeric(data_frame[i])) {
data_frame[i]/1000
}
}
return(data_frame)
}
执行功能:
test <- transformDivideThousand(mypatients)
答案 0 :(得分:4)
@ nicola的评论解释了你的循环出了什么问题。另一个选择是使用sapply
来标识数字列,从而产生更简洁的代码。例如,使用内置的iris
数据框:
iris[, sapply(iris, is.numeric)] =
iris[, sapply(iris, is.numeric)]/1000
您可以直接在数据框上运行它,如上所述,或将其放在函数中:
tDT <- function(data_frame) {
data_frame[, sapply(data_frame, is.numeric)] =
data_frame[, sapply(data_frame, is.numeric)]/1000
return(data_frame)
}
然后,运行它:
iris.new = tDT(iris)
为了将来参考,根据@ nicola的评论,这里是如何使for循环版本工作:
tDT2 <- function(data_frame) {
for (i in 1:ncol(data_frame)) {
if (is.numeric(data_frame[,i])) {
data_frame[,i] = data_frame[,i]/1000
}
}
return(data_frame)
}