bal*_*oor 1 r calculated-columns multiple-columns reshape dataframe
所以我对这个问题的回答看起来很多,但我找不到满足我的需要或我对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
Run Code Online (Sandbox Code Playgroud)
所以我在这里得到的数据集包含了不同地区("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
Run Code Online (Sandbox Code Playgroud)
注意:是的,我删除了一些行,但只是为了不占用屏幕
我希望这是足够的信息,使我可以理解我需要的东西和帮助的人.
由于我有更多种类的鱼,如果有人想要包含添加物种列的描述,那将是有帮助的.这是相同数据的代码,只是为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))
Run Code Online (Sandbox Code Playgroud)
干杯!
我不认为这个问题的标签应该是无关的,但是如果你没有找到适合我的问题的标签,那就先去改变吧.
这是一个典型的重塑然后补充任务,因此您可以:
1)用reshape2"融化"你的数据
library("reshape2")
df.m<-melt(df,id.vars=c("Year","Subdiv"))
Run Code Online (Sandbox Code Playgroud)
2)然后根据保存先前df列名的变量列添加其他列
library("stringr")
df.m$Fish<-str_extract(df.m$variable,"[A-Z]")
df.m$Age<-str_extract(df.m$variable,"[0-9]")
Run Code Online (Sandbox Code Playgroud)
我建议你查找重塑功能,因为这些通常是必需的,学习它们将为你节省大量的时间 http://www.statmethods.net/management/reshape.html
我认为基本data.frame功能将完全符合您的要求.尝试类似的东西:
data.frame(df$Year,df$Subdiv,Abun=c(df$H1,df$H2),
Age=rep(c(1,2),each=nrow(df)))
Run Code Online (Sandbox Code Playgroud)
因此,我在丰富列中连接您想要的值,并创建一个新列,该列只是为每行复制的年龄.您可以轻松创建类似的物种列.
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
38086 次 |
| 最近记录: |