有时我想对数据集执行功能(例如,差计算),并在该数据帧的结果直接存储存储在同一data.frame的输出时输出的行大小不同
df <- data.frame(a$C, diff(a$C))
但我不能这样做,因为行数是不同的。
是否有一些语法可以让我做到这一点,也许有NA
当函数(diff()
)没有给出结果?
有时我想对数据集执行功能(例如,差计算),并在该数据帧的结果直接存储存储在同一data.frame的输出时输出的行大小不同
df <- data.frame(a$C, diff(a$C))
但我不能这样做,因为行数是不同的。
是否有一些语法可以让我做到这一点,也许有NA
当函数(diff()
)没有给出结果?
没有这个一般的解决方案,而使得对整个辽阔的假设功能之一可能希望使用。
为您展示,我们可以很容易地计算出,从diff()
的第一个值将是一个NA
如果它返回它的例子:如果你正在使用diff()
那么你可以永远只是做
set.seed(5)
d <- rpois(10, 5)
> d
[1] 3 6 8 4 2 6 5 7 9 2
> diff(d)
[1] 3 2 -4 -2 4 -1 2 2 -7
所以:
> dd <- data.frame(d, Diff = c(NA, diff(d)))
> dd
d Diff
1 3 NA
2 6 3
3 8 2
4 4 -4
5 2 -2
6 6 4
7 5 -1
8 7 2
9 9 2
10 2 -7
但现在考虑你将与你可能希望使用不总是在正确的位置返回NA
任何其他功能做什么。
对于这个例子,我们可以使用动物园包,其具有na.pad
参数:如果正在使用带式接口建模函数
require(zoo)
d2 <- as.zoo(d)
ddd <- data.frame(d, Diff = diff(d2, na.pad = TRUE))
> ddd
d Diff
1 3 NA
2 6 3
3 8 2
4 4 -4
5 2 -2
6 6 4
7 5 -1
8 7 2
9 9 2
10 2 -7
(例如lm()
)和该函数具有na.action
参数,则可以在函数调用中设置na.action = na.exclude
,并且提取器函数(如fitted()
,resid()
等)将在正确的位置加回到它们的输出NA
,以便输出与传递给建模函数的数据具有相同的长度。
如果您还有其他更具体的案例想要探索,请编辑您的答案。在特定情况下,通常会有一个简单的答案给你的问题。在一般情况下,答案是否定的,不可能做你想问的问题。
的标准方法是创建照你这么说的一端延伸或其他与NA的向量
dfrm$diffvec <- c(NA, diff(firstvec))
非常感谢卓越的动物园解决方案。 – 2012-07-05 13:08:01