找出相同data.frame的每一行的差异

时间:2017-11-12 13:37:08

标签: r

我想计算每对其他行的差异。例如第一,第二,第三,第四等。

我们说x <- c(1,3,4,7)。我希望结果为c((3-1),(7-4))

我搜索了很多但没找到任何东西。我希望这不是重复。

2 个答案:

答案 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