如何按R中的年份和地区对此数据进行分类?

时间:2018-01-22 10:05:59

标签: r rstudio

所以我有以下数据:

image

我有5个地区,1998 - 2009年。我喜欢做的是每年按地区对国家进行分类。我是R的新人,所以我到目前为止唯一的一步是:

finalData$Region = factor(finalData$Region, levels = c('Former Socialist Bloc', 'Independent', 'Western Europe','Scandinavia', 'Former Yugoslavia'), levels = c(1, 2, 3, 4, 5))

但是我收到了这个错误:

  

因子错误(finalData $ Region,levels = c(“前社会主义集团”,   :形式参数“级别”由多个实际参数匹配

请告诉我如何解决这个问题以及如何进行分类的方法?谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个非常严谨的问题。但是我想你会想到这是你想要做的一个想法。

您有样本(行)是国家/地区,并且您有一些变量(列),这些变量是对这些样本的观察。您希望使用所有/多个变量(多变量分析)来聚类国家/地区。如果这是你想要做的,那么下面是一种方法。

我正在使用伪数据集创建 data.frame

dfr <- data.frame(Country=c("USA","UK","Germany","Austria","Taiwan","China","Japan","South Korea"),
                  Year=factor(c(2009,2009,2009,2010,2010,2010,2010,2011)),
                  Language=c("English","English","German","German","Chinese","Chinese","Japanese","Korean"),
                  Region=c("North America","Europe","Europe","Europe","Asia","Asia","Asia","Asia"))

> head(dfr)
  Country Year Language        Region
1     USA 2009  English North America
2      UK 2009  English        Europe
3 Germany 2009   German        Europe
4 Austria 2010   German        Europe
5  Taiwan 2010  Chinese          Asia
6   China 2010  Chinese          Asia

您要做的第一件事是将国家/地区名称移至row names,因为国家/地区名称是样本标签,而不是观察结果。

rownames(dfr) <- dfr$Country
dfr$Country <- NULL

现在您希望所有剩余的变量都是数字或因子。手动和仔细地做。我只有分类观察。最后我们想要 将所有因子重新编码为整数。这样我们的最终 data.frame 只包含数字。

dfr1 <- as.data.frame(sapply(dfr,as.numeric))
rownames(dfr1) <- rownames(dfr)

> head(dfr1)
        Year Language Region
USA        1        2      3
UK         1        2      2
Germany    1        3      2
Austria    2        3      2
Taiwan     2        1      1
China      2        1      1

现在运行一些聚类算法。这里例如是PCA。

pc <- prcomp(dfr1)
pcval <- pc$x

> head(pcval)
                PC1        PC2         PC3
USA     -1.04369951  1.2743507  0.36120850
UK      -0.87597336  0.5087910 -0.25990844
Germany  0.06243255  0.8258430 -0.39728520
Austria  0.36452903  0.2660249  0.37429849
Taiwan  -1.34455665 -1.1336389  0.02793507
China   -1.34455665 -1.1336389  0.02793507

将输出主成分与原始数据相结合。

pcval1 <- cbind(pcval,dfr)
rownames(pcval1) <- rownames(dfr)

> head(pcval1)
                PC1        PC2         PC3 Year Language        Region
USA     -1.04369951  1.2743507  0.36120850 2009  English North America
UK      -0.87597336  0.5087910 -0.25990844 2009  English        Europe
Germany  0.06243255  0.8258430 -0.39728520 2009   German        Europe
Austria  0.36452903  0.2660249  0.37429849 2010   German        Europe
Taiwan  -1.34455665 -1.1336389  0.02793507 2010  Chinese          Asia
China   -1.34455665 -1.1336389  0.02793507 2010  Chinese          Asia

什么是PCA,这里发生的事情显然超出了这个答案的范围。简而言之,它会根据您观察到的所有变量创建一些新变量。

散点图主要成分1和2.颜色点由某个变量。说“地区”。将国家/地区名称添加为文本标签。

library(ggplot2)
pcval1$Country <- rownames(pcval1)

ggplot(pcval1,aes(x=PC1,y=PC2,colour=Region))+
  geom_point(size=3)+
  geom_text(aes(label=pcval1$Country),hjust=1.5)+
  theme_bw(base_size=15)

enter image description here

现在我们看到国家已根据数据集中的观察结果聚集在一起。我们按国家/地区大致按国家/地区分组。显然,根据您的数据,可能会有也可能没有任何聚类。

这只是一个例子。如果你盲目地遵循这个,你可能会违反各种统计假设和什么不是。您必须考虑要处理的数据分发类型以及适合该数据的聚类算法等。