R语言 如何在R数据框架中找到每两个连续行的数值之差
在这篇文章中,我们将讨论如何在R编程语言中找到DataFrame中每两个连续行的值的差异。
方法1:使用 diff() 方法
基本R语言中的diff()方法用于查找R数据框中所有连续行的差异。它返回一个向量,其长度相当于输入列的长度-1。 输入列的元素从最后一个元素开始评估,每个元素被第n个索引的元素-第(n-1)个索引的元素替换。 第一个元素没有输出,因为它没有任何元素可以参照诱导滞后。这种方法适用于整数或数字数据列本身。
语法
diff(vec , lag = 1 )
参数:
vec – 要计算差异的向量
lag – (默认:1 )计算差异的第n个前值。
例子
# creating a dataframe
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
col2 = letters[1:3],
col3 = c(1,4,1,2,3,2,1,2,2))
print ("Original DataFrame")
print (data_frame)
print ("Difference in col3 successive values")
diff(data_frame$col3)
输出
[1] "Original DataFrame"
col1 col2 col3
1 1 a 1
2 1 b 4
3 1 c 1
4 2 a 2
5 2 b 3
6 2 c 2
7 3 a 1
8 3 b 2
9 3 c 2
[1] "Difference in col3 successive values"
[1] 3 -3 1 1 -1 -1 1 0
方法2:使用dplyr包
R编程语言中的 “dply “包可以用来进行数据的修改或增强。它提供了大量的函数来产生数据操作和提取操作。
mutate() 方法用于创建、删除和更新数据框架的列。它以新的列名和相应的函数作为参数来应用于它。
语法
mutate ( new-col-name = col-name – lag(col-name))
dplyr包的lag()方法用于返回指定列的前值。如果该列没有前面的行,它将返回NA。自定义的列名可以分配给差异列。这个方法与其他方法不同,因为它返回原始数据框架的超集作为输出。
例子
library("dplyr")
# creating a dataframe
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
col2 = letters[1:3],
col3 = c(1,4,1,2,2,2,1,2,2))
print ("Original DataFrame")
print (data_frame)
print ("Modified DataFrame")
# difference in rows of col3
data_frame %>% mutate(col3_diff = col3 - lag(col3))
输出
[1] "Original DataFrame"
col1 col2 col3
1 1 a 1
2 1 b 4
3 1 c 1
4 2 a 2
5 2 b 2
6 2 c 2
7 3 a 1
8 3 b 2
9 3 c 2
[1] "Modified DataFrame"
col1 col2 col3 col3_diff
1 1 a 1 NA
2 1 b 4 3
3 1 c 1 -3
4 2 a 2 1
5 2 b 2 0
6 2 c 2 0
7 3 a 1 -1
8 3 b 2 1
9 3 c 2 0
方法3:使用 nrow() 方法
所有的列都可以通过计算来找到数据框架中每一对连续行的数值之差。数据框架从最后一行开始访问,每一行都比它早一个位置。而且,数值是由第n个索引的行与第 (n-1)个 索引的行相减而得。如果数据框架列的类别是一个字符,将返回一个缺失的值。
第一行被从输出数据框架中删除。从第2行开始的行号将作为一个输出数据框架返回。
例子
# creating a dataframe
data_frame <- data.frame(col1 = rep(c(1:3), each = 3),
col2 = letters[1:3],
col3 = c(1,4,1,2,2,2,1,2,2))
print ("Original DataFrame")
print (data_frame)
# calculating rows of dataframe
rows <- nrow(data_frame)
# difference in rows of entire dataframe
diff_frame <- data_frame[-1,] - data_frame[-rows,]
print ("Modified DataFrame")
print(diff_frame)
输出
[1] "Original DataFrame"
col1 col2 col3
1 1 a 1
2 1 b 4
3 1 c 1
4 2 a 2
5 2 b 2
6 2 c 2
7 3 a 1
8 3 b 2
9 3 c 2
[1] "Modified DataFrame"
col1 col2 col3
2 0 NA 3
3 0 NA -3
4 1 NA 1
5 0 NA 0
6 0 NA 0
7 1 NA -1
8 0 NA 1
9 0 NA 0