融合并投射数据帧添加新变量

时间:2014-05-22 23:05:22

标签: r casting dataframe reshape melt

我在尝试reshape我的数据框时遇到了一些麻烦:sites_w_richness DATASET LINK HERE

我一直试图将数据整理成四列

  1. 网站
  2. 经度
  3. 纬度
  4. 情景
  5. 丰富价值。
  6. 不幸年份(2050年和2070年)和方案(2.6和4.5)数据嵌入数据集第3列到第6列的标题中。有没有办法从标题中提取信息并将数据帧重新转换为我需要的六列?

    我试过这个,但我得到的只是天真的。

    #melt and cast to format 
    require (reshape)
    sites_richness<-read.csv('sites_w_richness.csv', header=T)
    rich.melt<-melt (sites_richness, id=1:2)
    rich.cast<-cast(rich.melt, Longitude ~ Latitude ~ variable ~ value)
    

1 个答案:

答案 0 :(得分:2)

reshape已被reshape2取代,速度更快且内存效率更高。它还有一个函数colsplit,它可以按你的意愿执行

library(reshape2)
# melt (using site, longitude and latitude as ids)
rich.melt <- melt(site_richness, id = 1:3)
# create a variable without `site_richness_` prefix
rich.melt$v2 <- rich.melt$variable
levels(rich.melt$v2) <- gsub('^site_richness_','',levels(rich.melt$v2))
# use colsplit to split on `_` and combine with the newest data
rich.melt2 <- cbind(rich.melt, colsplit(rich.melt$v2, pattern = '_', names = c('scenario','year')))
# drop unwanted columns and reorder
rich.melt.final <- rich.melt2[, c("Site", "Longitude", "Latitude", 
                                 "scenario", "year", "species_richness")]
head(rich.melt.final)
     Site Longitude Latitude scenario year species_richness
# 1  ABSF  -78.6492  37.4343      2.6 2050                4
# 2 ALLSP  -74.1487  40.1481      2.6 2050               31
# 3  ANSF  -71.9341  42.7743      2.6 2050               49
# 4  ARSP  -68.0148  46.6067      2.6 2050               19
# 5  BAXP  -68.8520  46.1645      2.6 2050               23
# 6  BBSP  -71.3822  43.1643      2.6 2050               35