有时我想对数据集执行一个函数(例如差异计算)并将结果直接存储在数据框中
df <- data.frame(a$C, diff(a$C))
但我不能这样做,因为行数不同。
是否有一些语法可以让我做到这一点,也许NA
当函数 ( diff()
) 没有结果时?
有时我想对数据集执行一个函数(例如差异计算)并将结果直接存储在数据框中
df <- data.frame(a$C, diff(a$C))
但我不能这样做,因为行数不同。
是否有一些语法可以让我做到这一点,也许NA
当函数 ( diff()
) 没有结果时?
标准方法是创建一个向量,该向量在一端或另一端扩展为 NA
dfrm$diffvec <- c(NA, diff(firstvec) )
如果不对人们可能希望使用的全部功能做出大量假设,就没有通用的解决方案。
对于您展示的示例,我们可以很容易地计算出第一个值 fromdiff()
将是 anNA
如果它返回它:
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
因此,如果您正在使用,diff()
那么您总是可以这样做:
> 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
正确的位置。
对于这个例子,我们可以使用有一个参数的zoo包: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
,以便输出与传递给建模函数的数据长度相同。
如果您有其他更具体的案例要探索,请编辑您的答案。在特定情况下,您的 Q 通常会有一个简单的答案。在一般情况下,答案是否定的,不可能按照您的要求去做。