根据 colnames 中的子字符串更改 coltypes

Change the coltypes based on a substring in colnames

我有一个非常大的销售数据数据框 (df8)。载入的时候,一些我想是数字的变量载入为chr。我想将 colname 包含单词 "Order" 的每一列从 chr 更改为数字。我该怎么做?

我会使用函数 grepl 查找出现的 "order" 并遍历每一列并转换为数字。请注意,变量实际上是字符,如果您的数据是一个因素,它将不起作用(需要 (as.numeric(as.character(x))).

# create data.frame with characters
xy <- data.frame(a = runif(5), b.order = runif(5), cOrder = runif(5))
xy[, c(2, 3)] <- sapply(xy[, c(2, 3)], FUN = as.character)
str(xy)
'data.frame':   5 obs. of  3 variables:
 $ a      : num  0.914 0.468 0.106 0.624 0.841
 $ b.order: chr  "0.363523897947744" "0.56488766730763" "0.42081760126166" "0.560672372812405" ...
 $ cOrder : chr  "0.949268750846386" "0.596737345447764" "0.368769273394719" "0.717566329054534" ...

with.order <- grepl("order", names(xy), ignore.case = TRUE)

xy[, with.order] <- sapply(xy[, with.order], FUN = as.numeric)
str(xy)
'data.frame':   5 obs. of  3 variables:
 $ a      : num  0.914 0.468 0.106 0.624 0.841
 $ b.order: num  0.364 0.565 0.421 0.561 0.768
 $ cOrder : num  0.949 0.597 0.369 0.718 0.417