如何在 R DataFrame 中的每两连续行中找到值的差异?
在本文中,我们将讨论如何在 R 编程语言中找到 DataFrame 中每连续两行的值差异。
方法 1:使用diff()方法
基础 R 中的 diff() 方法用于查找 R 数据帧中所有连续行对之间的差异。它返回一个向量,其长度等于输入列的长度 – 1。输入列的元素从最后一个元素开始计算,其中每个元素都替换为第 n 个索引处的元素 – (n-1) 处的元素第一个索引。第一个元素不会返回任何输出,因为它没有任何元素可以引起滞后。此方法适用于整数或数字数据列本身。
Syntax:
diff(vec , lag = 1 )
Parameter :
vec – Vector to compute the differences of
lag – (Default : 1 )The nth previous value to compute the differences with
例子:
R
# 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)
R
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))
R
# 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 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
方法二:使用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