📜  如何在 R DataFrame 中的每两连续行中找到值的差异?

📅  最后修改于: 2022-05-13 01:54:38.118000             🧑  作者: Mango

如何在 R DataFrame 中的每两连续行中找到值的差异?

在本文中,我们将讨论如何在 R 编程语言中找到 DataFrame 中每连续两行的值差异。

方法 1:使用diff()方法

基础 R 中的 diff() 方法用于查找 R 数据帧中所有连续行对之间的差异。它返回一个向量,其长度等于输入列的长度 – 1。输入列的元素从最后一个元素开始计算,其中每个元素都替换为第 n 个索引处的元素 – (n-1) 处的元素第一个索引。第一个元素不会返回任何输出,因为它没有任何元素可以引起滞后。此方法适用于整数或数字数据列本身。

例子:

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()方法用于创建、删除和更新数据帧的列。它将新列名和相应的函数作为参数应用到它上面。

句法:



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