从具有缺失值的变量的旧列创建新数据框

时间:2017-02-24 19:58:43

标签: r merge formatting transformation data-processing

我已经筛选了几个链接1234等等,但我似乎无法做到这一点适合我的具体问题。

问题

我有以下数据框:

df <- read.csv("crime_data", header=TRUE)
head(df)

enter image description here

我在数据上应用了K-means,并添加了一个额外的列cluster,所以现在我想将它们排序到人口最多的前50个城市和人口最少的前50个城市,这给了我以下:

df_sorted_asc <- df[with(df, order(population, city)), ]
head(df_sorted_asc)

enter image description here

效果很好......现在我的城市按升序排序,但这里是我遇到麻烦的地方,年份数从1到35,但不是每个城市都有全部35,有些从21-35,有些从2-10,它变化很大,但所有城市的域名肯定是1-35。我最终想要一个数据框,其中行作为前50个最小的独特城市,接下来是前50个最大的独特城市(总共观察100个),而我希望从1:35开始的列与分配的集群(我们添加的新列K均值)。就我而言,这是完全难倒的。

f <- function(listOfCities, df){
  # Returns a list of sorted years and clusters for each year of each city
  yearsVect <- NULL
  clusterVect <- NULL
  for(i in 1:length(listOfCities)){
    obs <- df[which(df$city == listOfCities[i]),c("year","cluster")]
    obs <- obs[with(obs, order(year,cluster)), ]
    print(obs)
  }
}
f(top50largest, df_sorted_asc)

输出以下每个形状的大量data.frame对象,这对于我想要的东西非常接近:

enter image description here

我不确定如何将它们融合在一起多年(填补缺少NA的地方缺少年份)以及之后的集群分配。所以我希望数据框看起来像这样(如果年份没有那么,其中一些行值为NA:

enter image description here

带数据的简明示例

示例数据here如果您点击&#34; test.csv&#34;

df<-read.csv("test.csv",header=TRUE)
head(df)
        city    state   year    cluster
257080  TAVISTOCK   29  31      2
267183  TAVISTOCK   29  32      3
277426  TAVISTOCK   29  33      3
287573  TAVISTOCK   29  34      2
297649  TAVISTOCK   29  35      2
252894  LAKESIDE    5   31      3
262987  LAKESIDE    5   32      5
273201  LAKESIDE    5   33      5
...

我想找到一种方法,使这个数组具有唯一的城市作为行名称,然后列是由群集填充的年份(从1:35),如果缺少年份,则只填充NA。 / p>

0 个答案:

没有答案