r - colMeans 在 R 中不起作用
问题描述
我需要为我的作业执行此操作:我们关注以下变量子集:regime
、oil
、logGDPcp
和illit
。删除在任何这些变量中具有缺失值的观测值。使用该scale()
函数,缩放这些变量,使每个变量的均值为零,标准差为 1。用两个聚类拟合 k-means 聚类算法。每个集群分配了多少个观测值?使用原始的非标准化数据,计算每个集群中这些变量的均值。这就是我所做的
resources <- read.csv("https://raw.githubusercontent.com/umbertomig/intro-prob-stat-FGV/master/datasets/resources.csv")
#subset
resources.subset <- subset(resources, select = c("cty_name", "year", "regime", "oil", "logGDPcp", "illit"))
#removing missing values
resources1 <- na.omit(resources.subset)
#scaling
scaled.resources <- scale(resources1)
#mean of zero
colMeans(scaled.resources)
#standard deviation of 1
apply(scaled.resources, 2, sd)
#fitting into two clusters
cluster2 <- kmeans(resources.scaled, centers = 2)
#how many observations are assigned to each cluster?
nrow(resources.scaled)
table(cluster2$cluster)
#means of the variables
cluster2$centers
g1 <- resources1[cluster2$cluster == 1, ]
colMeans(g1)
g2 <- resources1[cluster2$cluster == 2, ]
colMeans(g2)
但我收到此错误“colMeans(x,na.rm = TRUE)中的错误:'x'必须是数字
我该如何解决这个问题?
解决方案
有一列不是数字
str(resources1)
#'data.frame': 417 obs. of 6 variables:
# $ cty_name: chr "United Arab Emirates" "Argentina" "Argentina" "Argentina" ...
# $ year : int 1975 1970 1975 1980 1985 1990 1995 1997 1970 1970 ...
# $ regime : num -7 -9 6 -9 8 8 8 8 -7 -2 ...
# $ oil : num 65.9386 0.0241 0.0279 0.361 0.6939 ...
# $ logGDPcp: num 9.71 7.64 8.07 8.53 8.58 ...
# $ illit : num 40.2 7.3 6.5 6.1 5 4.3 3.7 3.5 80.1 89.1 ...
# - attr(*, "na.action")= 'omit' Named int [1:4113] 1 2 3 4 5 6 7 8 9 10 ...
..- attr(*, "names")= chr [1:4113] "1" "2" "3" "4" ...
因此,最好scale
只使用数字列
i1 <- sapply(resources1, is.numeric)
scaled.resources <- scale(resources1[i1])
推荐阅读
- python - cURL,Python 中的 API
- javascript - 如何将画布转换为具有透明度的图像?
- python - 试图检查函数参数是否是python中的整数
- git - 如何使用 squashed 提交变基
- c - 如何从基本的 Putpixel 函数进行裁剪
- laravel - Laravel 查询总和限制
- terminal - 使用 PageSpeed Insights API v5 在终端中使用 curl 查找服务器响应时间
- c# - 如何在 c# 中用不可能的长字符串来补救 OutOfMemory 异常?
- excel - VBA 将所有工作表导出为带有工作表名称的图像
- c++ - 代码执行无法继续,因为未找到 SDL2.dll