我想计算每对其他行的差异。例如第一,第二,第三,第四等。
我们说x <- c(1,3,4,7)
。我希望结果为c((3-1),(7-4))
。
我搜索了很多但没找到任何东西。我希望这不是重复。
答案 0 :(得分:1)
您应该将矢量转换为2行数组,然后使用diff
来计算行之间的差异,在这种情况下,这将是第二行和第一行之间的差异,因为只有两行。
> v <- c(1,3,4,7)
> v
[1] 1 3 4 7
> m <- matrix(v, nrow = 2)
> m
[,1] [,2]
[1,] 1 4
[2,] 3 7
> diff(m)
[,1] [,2]
[1,] 2 3
在一个步骤中,返回一个向量:
> c(diff(matrix(v, nrow = 2)))
[1] 2 3
答案 1 :(得分:0)
使用iris
数据集显示的示例。使用lapply()
函数对数据框执行。对于连续行之间的差异,请使用diff()
,然后提取每个替代差异。
<强>输入强>
df2 <- head(iris[,1:4])
df2
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 5.1 3.5 1.4 0.2
# 2 4.9 3.0 1.4 0.2
# 3 4.7 3.2 1.3 0.2
# 4 4.6 3.1 1.5 0.2
# 5 5.0 3.6 1.4 0.2
# 6 5.4 3.9 1.7 0.4
连续行之间的差异
data.frame(lapply(df2, function(x) diff(x)))
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 -0.2 -0.5 0.0 0.0
# 2 -0.2 0.2 -0.1 0.0
# 3 -0.1 -0.1 0.2 0.0
# 4 0.4 0.5 -0.1 0.0
# 5 0.4 0.3 0.3 0.2
所需输出
第2行和第1行的差异,第4行和第3行的差异,以及 第6行和第5行的差异
data.frame(lapply(df2, function(x) diff(x)))[seq(1, nrow(df2), by = 2),]
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 -0.2 -0.5 0.0 0.0
# 3 -0.1 -0.1 0.2 0.0
# 5 0.4 0.3 0.3 0.2