2015-05-04 23 views
0

我有一个非常大的销售数据(df8)数据框。加载时,我想将数字加载的一些变量作为chr加载。我想要将colname包含单词“Order”的每一列从chr更改为numeric。我怎样才能做到这一点?根据姓氏中的子字符串更改coltypes

+0

也许'?as.numeric'将是有益的。 – r2evans

+0

多少列你有什么? – Soheil

+0

找出为什么他们被导入为字符(或最有可能的因素)。可能有'NA'字符串,您应该指定为导入或可能有拼写错误或不寻常的格式或重要的评论在数据列或... – Roland

回答

1

我将使用函数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 
+0

请注意,这可以治愈症状我们从现实生活中知道往往不是最佳的行动方案。 – Roland

+0

并且该解决方案是'read.csv(... colClasses)' – smci

+0

@smci那也不调查为什么他们没有得到预期的类。 – Roland

相关问题