1

所以我找了很多关于这个问题的答案,但我找不到满足我的需求或我对 R 的理解的答案。

首先,这里有一些代码让您了解我的数据集是什么样的

df <- data.frame("Year" = 1991:2000, "Subdiv" = 24:28, H1 = c(31.2,34,70.2,19.8,433.7,126.34,178.39,30.4,56.9,818.3),
             H2 = c(53.9,121.5,16.9,11.9,114.6,129.9,221.1,433.4,319.2,52.6))             
> df
   Year Subdiv     H1    H2
1  1991     24  31.20  53.9
2  1992     25  34.00 121.5
3  1993     26  70.20  16.9
4  1994     27  19.80  11.9
5  1995     28 433.70 114.6
6  1996     24 126.34 129.9
7  1997     25 178.39 221.1
8  1998     26  30.40 433.4
9  1999     27  56.90 319.2
10 2000     28 818.30  52.6

所以我在这里得到的是一个数据集,其中包含随着时间的推移,不同地区(“细分”)中不同年龄的大量鲱鱼。H1 代表 1 岁时的鲱鱼。我的真实数据集包含更多年龄和更多区域(以及其他鱼类)。

我想做的是将丰富的不同年龄合并到一个列中,同时保持连接的数据(Year,Subdiv)以及为 Age 创建一个新列。像这样:

       Year Subdiv   Abun   Age
    1  1991     24  31.20    1
    2  1992     25  34.00    1
    3  1993     26  70.20    1
    4  1994     27  19.80    1
    5  1995     28 433.70    1 
    6  1991     24   53.9    2
    7  1992     25  121.5    2
    8  1993     26   16.9    2
    9  1994     27   11.9    2
   10  1995     28  114.6    2

注意:是的,我删除了一些行,但只是为了不拥挤屏幕

我希望这是足够的信息,可以让我理解我的需要并有人提供帮助。

由于我有更多种类的鱼,如果有人想包括添加物种列的描述,那将很有帮助。这是相同数据的代码,只是复制了鲱鱼(Sn):

df <- data.frame("Year" = 1991:2000, "Subdiv" = 24:28, H1 = c(31.2,34,70.2,19.8,433.7,126.34,178.39,30.4,56.9,818.3),
                 H2 = c(53.9,121.5,16.9,11.9,114.6,129.9,221.1,433.4,319.2,52.6),
                 S1 = c(31.2,34,70.2,19.8,433.7,126.34,178.39,30.4,56.9,818.3),
                 S2 = c(53.9,121.5,16.9,11.9,114.6,129.9,221.1,433.4,319.2,52.6)) 

干杯!

我不认为这个问题的标签应该是无关的,但如果你没有找到适合我的问题的标签,那就去改变吧。

4

2 回答 2

7

这是一个典型的重塑然后补充任务,因此您可以:

1) 用 reshape2 '融化'你的数据

library("reshape2")
df.m<-melt(df,id.vars=c("Year","Subdiv"))

2)然后根据包含您以前的df列名的变量列添加其他列

library("stringr")
df.m$Fish<-str_extract(df.m$variable,"[A-Z]")
df.m$Age<-str_extract(df.m$variable,"[0-9]")

我建议您查看重塑功能,因为这些功能非常普遍,学习它们将在未来为您节省大量时间 http://www.statmethods.net/management/reshape.html

于 2013-11-06T14:24:33.257 回答
6

我认为基本data.frame功能将完全符合您的要求。尝试类似:

data.frame(df$Year,df$Subdiv,Abun=c(df$H1,df$H2),
  Age=rep(c(1,2),each=nrow(df)))

所以我在丰度列中连接你想要的值,并创建一个新列,它只是为每一行复制的年龄。您可以轻松创建类似的物种列。

希望有帮助!

于 2013-11-06T14:17:59.597 回答