所以我对这个问题的答案看起来很多,但我找不到满足我的需要或我对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
所以我在这里得到的是一个数据集,其中包含不同时期(“Subdiv”)不同年龄段的丰富鲱鱼。 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
注意:是的,我删除了一些行,但只是为了不占用屏幕
我希望这些信息足以让我理解我需要什么以及帮助别人。
由于我有更多种类的鱼,如果有人想要包含添加物种列的描述,那将会有所帮助。 这是相同数据的代码,只是为sprat(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))
干杯!
我不认为这个问题的标签应该是不相关的,但是如果你没有找到适合我的问题的标签,那就先去改变吧。
答案 0 :(得分: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
答案 1 :(得分:6)
我认为基本的data.frame
函数将完全符合您的要求。尝试类似:
data.frame(df$Year,df$Subdiv,Abun=c(df$H1,df$H2),
Age=rep(c(1,2),each=nrow(df)))
因此,我在丰富列中连接您想要的值,并创建一个新列,该列只是为每行复制的年龄。您可以轻松创建类似的物种列。
希望有所帮助!