【发布时间】:2014-01-10 14:13:03
【问题描述】:
我在数据框中有每个深度的采样数据。现在必须将原始深度内插到新深度,为此我在不同的数据框中有信息。 所以需要做的是:
- 在每个样本类型(即 a、b、)之后创建一个新行
- 从上面复制“值”
- 将最后一个 sam_bot(bottom) 作为新的 sam_top
- 将 dat2 sam_new_bot 作为新的 sam_bot
第一个 data.frame 如下所示:
dat1 = data.frame(Samp = rep(letters[1:4], each = 4),
sam_top = seq(1:4),
sam_bot = seq(2,5),
value = runif(16),
stringsAsFactors = F)
给我:
Samp sam_top sam_bot value
1 a 1 2 0.75864637
2 a 2 3 0.44056410
3 a 3 4 0.18105700
4 a 4 5 0.67938119
5 b 1 2 0.75444497
6 b 2 3 0.59411439
7 b 3 4 0.11755459
8 b 4 5 0.70143005
9 c 1 2 0.44234565
10 c 2 3 0.82872824
第一个具有新深度的第二个数据帧如下所示:
dat2 <- read.table(text = "Samp sam_new_bot
a 6
b 7
c 6
d 7.5", header = TRUE)
> dat2
Samp sam_new_bot
1 a 6.0
2 b 7.0
3 c 6.0
4 d 7.5
结果应该是这样的:
Samp sam_top sam_bot value
1 a 1 2 0.75864637
2 a 2 3 0.44056410
3 a 3 4 0.18105700
4 a 4 5 0.67938119
5 a 5 6 0.67938119
5 b 1 2 0.75444497
6 b 2 3 0.59411439
7 b 3 4 0.11755459
8 b 4 5 0.70143005
9 b 5 7 0.70143005
10 c 1 2 0.44234565
请注意,data.frame 没有固定的间隔,因此可以有任意数量的 Samp。
更新: 我设法插入行:
do.call(rbind, by(dat1, dat1$Samp, rbind, dat1[1,]))
现在我的理解是,我必须用 x 的函数替换 dat1[1] 部分,但不知何故我没有把事情放在一起。
【问题讨论】:
-
以下两种解决方案都有效,但我希望有一个不包括对文件进行排序或排序的解决方案。原始数据集包含很多列,这些列有时依赖于与 sam_top 不同的顺序。