【问题标题】:R - Combining multiple columns together within a data frame, while keeping connected dataR - 在数据框中将多列组合在一起,同时保持连接的数据
【发布时间】:2013-11-17 19:37:42
【问题描述】:

所以我找了很多关于这个问题的答案,但我找不到满足我的需求或我对 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)) 

干杯!

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

【问题讨论】:

标签: r dataframe multiple-columns reshape calculated-columns


【解决方案1】:

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

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

【讨论】:

  • 谢谢你!这解决了它没有问题。我一定会检查 reshape2 。再次感谢!
【解决方案2】:

我认为基本的data.frame 功能将完全满足您的需求。尝试类似:

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

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

希望有帮助!

【讨论】:

  • 值得注意的是,如果您有很多鱼和很多鱼龄,使用此方法可能难以管理,但在已知的小样本上这是一个非常可行的解决方案。
猜你喜欢
  • 2019-03-03
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 2022-08-20
相关资源
最近更新 更多