【问题标题】:How to combine a list and a matrix into a dataframe如何将列表和矩阵组合成数据框
【发布时间】:2014-01-08 11:40:50
【问题描述】:

所以我有一个关于荷兰海岸的大型数据集,他们将荷兰海岸划分为不同的区域,在这些区域中,沿着海滩有多个横断面,他们每五米测量一次海拔高度。他们根据彼此的距离命名不同的样带。

这些数据在 netcdf 文件中,但我最终得到了一个非常漂亮的矩阵,如下所示:

> a<-matrix(c(100,80,60,40,200,180,160,140),nrow=4,ncol=6)
> colnames(a) <- c(100,200,300,400,100,101)
> rownames(a) <- c(500,400,300,200)
> a
    100 200 300 400 100 101
500 100 200 100 200 100 200
400  80 180  80 180  80 180
300  60 160  60 160  60 160
200  40 140  40 140  40 140

列名是海滩沿岸的不同样带,行名是跨岸距离。

但是,对于荷兰海岸的不同区域,不同样带的“名称”通常相同。现在我有一个区域列表,可以很好地放入矩阵中:

> b <- c(2,2,2,2,3,3)
> c<-rbind(b,a)
> c
    100 200 300 400 100 101
b     2   2   2   2   3   3
500 100 200 100 200 100 200
400  80 180  80 180  80 180
300  60 160  60 160  60 160
200  40 140  40 140  40 140 

但是,当我制作这个矩阵的数据框时,我得到了这个:

> d<-as.data.frame(as.table(c))
> d
   Var1 Var2 Freq
1     b  100    2
2   500  100  100
3   400  100   80
4   300  100   60
5   200  100   40
6     b  200    2
7   500  200  200
8   400  200  180
9   300  200  160
10  200  200  140
11    b  300    2
12  500  300  100
13  400  300   80
14  300  300   60
15  200  300   40
16    b  400    2
17  500  400  200
18  400  400  180
19  300  400  160
20  200  400  140
21    b  100    3
22  500  100  100
23  400  100   80
24  300  100   60
25  200  100   40
26    b  101    3
27  500  101  200
28  400  101  180
29  300  101  160
30  200  101  140

我想要的是 b(所以不同的沿海地区)是一个额外的列。

所以它看起来像这样:

Var1 Var2 频率 var3

2   500  100  100   2
3   400  100   80   2
4   300  100   60   2
5   200  100   40   2
7   500  200  200   2
8   400  200  180   2
9   300  200  160   2
10  200  200  140   2
12  500  300  100   2
13  400  300   80   2
14  300  300   60   2
15  200  300   40   2
17  500  400  200   2
18  400  400  180   2
19  300  400  160   2
20  200  400  140   2
22  500  100  100   3
23  400  100   80   3
24  300  100   60   3
25  200  100   40   3
27  500  101  200   3
28  400  101  180   3
29  300  101  160   3
30  200  101  140   3

我不太确定如何执行此操作,这些数据来自 netcdf 文件,也许我没有以正确的方式传输它...此外,我的数据集当然要大得多,这只是一个小示例它的外观。如果我可以提供更多信息,请说出来。

【问题讨论】:

  • 请显示预期的输出。要转置矩阵吗?
  • as.data.frame(t(c))?

标签: r matrix dataframe


【解决方案1】:

ab 包含不同的数据类型,因此您不应将它们组合成一个矩阵。将它们分开也会使您的代码更简单。

您可以使用来自reshape2melta 从宽格式转换为长格式。

library(reshape2)
cbind(melt(a), rep(b, each = nrow(a)))

【讨论】:

  • 这是行不通的,因为当 b 在数据帧中形成时,它的长度与 a 不同。我知道合并它们是行不通的,但是我不知道我还能做什么。
  • @Marinka 哎呀,已修复。
猜你喜欢
  • 2017-05-03
  • 2013-04-13
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多