我在尝试reshape
我的数据框时遇到了一些麻烦:sites_w_richness
DATASET LINK HERE。
我一直试图将数据整理成四列
不幸年份(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)
答案 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