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

查找相同data.frame的每一行对的差异,r,R,我想计算每两行的差值。e、 g.第一从第二,第三从第四等 假设我有x你应该把向量变成一个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] [,

我想计算每两行的差值。e、 g.第一从第二,第三从第四等


假设我有
x你应该把向量变成一个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

使用
iris
数据集显示的示例。使用
lappy()
函数在数据帧上执行。对于连续行之间的差异,请使用
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
所需输出

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
第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

你可以做
diff(x)[c(真,假)]
@Sotos非常感谢。特殊的解决方法。另外,
x[c(假,真)]-x[c(真,假)]
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