错误标准化R中的变量:仅在具有所有数字变量的数据框上定义'

时间:2017-03-21 16:12:35

标签: r

我只是想将我的数据帧变量集标准化为100分。原始变量是10分制,有4个小数点。

我可以看到我的错误并非闻所未闻,例如

Why am I getting a function error in seemingly similar R code?

Error: only defined on a data frame with all numeric variables with ddply on large dataset

但我已经使用

验证了所有变量都是数字的
library(foreign)
library(scales)
ches <- read.csv("chesshort15.csv", header = TRUE)
ches2 <- ches[1:244, 3:10]
rescale(ches2, to = c(0,100), from = range(ches2, na.rm = TRUE, finite = TRUE))

这给出了错误:FUN中的错误(X [[i]],...):   仅在具有所有数字变量的数据框上定义

我已使用str(ches2)验证了所有变量的数字类型 - 请参见下文:

'data.frame':   244 obs. of  8 variables:
 $ galtan            : num  8.8 9 9.65 8.62 8 ...
 $ civlib_laworder   : num  8.5 8.6 9.56 8.79 8.56 ...
 $ sociallifestyle   : num  8.89 7.2 9.65 9.21 8.25 ...
 $ immigrate_policy  : num  9.89 9.6 9.38 9.43 9.13 ...
 $ multiculturalism  : num  9.9 9.6 9.57 8.77 9.07 ...
 $ ethnic_minorities : num  8.8 9.6 9.87 9 8.93 ...
 $ nationalism       : num  9.4 10 9.82 9 8.81 ...
 $ antielite_salience: num  8 9 9.47 8.88 8.38 

简而言之,我很难理解它拒绝执行代码的原因。

有关信息,Head(bb)给出:

  galtan civlib_laworder sociallifestyle immigrate_policy multiculturalism ethnic_minorities
1  8.800           8.500           8.889            9.889            9.900             8.800
2  9.000           8.600           7.200            9.600            9.600             9.600
3  9.647           9.563           9.647            9.375            9.571             9.867
4  8.625           8.786           9.214            9.429            8.769             9.000
5  8.000           8.563           8.250            9.133            9.071             8.929
6  7.455           8.357           7.923            8.800            7.800             8.455
  nationalism antielite_salience
1       9.400              8.000
2      10.000              9.000
3       9.824              9.471
4       9.000              8.882
5       8.813              8.375
6       8.000              8.824

1 个答案:

答案 0 :(得分:1)

rescale函数抛出该错误,因为它需要一个数字向量,而您正在为它提供一个数据帧。你需要迭代;浏览数据框中的每一列并单独缩放它们。

试试这个:

sapply(ches2, rescale, to = c(0,100))

您不需要代码的range(ches2, na.rm = TRUE, finite = TRUE)部分,因为rescale非常智能,可以自行删除NA值