r - 对于多行 (i+1) 的函数?

标签 r for-loop if-statement bigdata

R 新手,如果有我不知道的简单答案,我深表歉意。

我有一个包含 127.124 个观测值和 5 个变量的数据框

头部(SortedDF)

       number Retention.time..min. Charge      m.z Group
102864   6947             12.58028      5 375.0021 Pro
68971   60641             23.36693      2 375.1373 Pro
75001  104156             24.54187      3 375.1540 Pro
87435  146322             22.69630      3 375.1540 Pro
82658   88256             22.32042      3 375.1541 Pro
113553  97971             14.54600      3 375.1566 Pro
...

我想将每一行与其下面的行进行比较(所以基本上是行号与行号+1),看看它们是否匹配。在阅读了 For 和 if-else 函数后,我想出了以下代码:

for (i in 1:dim(SortedDF)) 
  if(abs(m.z[i]-m.z[i+1])<0.01 | abs(Retention.time..min.[i]-Retention.time..min.[i+1])<1 | (Charge[i]=Charge[i+1]) | Group[i]!=Group[i+1]) 
    print("Match")
  else
    print("No match")

但是,这段代码不起作用,因为它只打印出第一个函数 function [1],而且我不确定 i+1 是否是一个东西。有没有办法不使用 i+1 来解决这个问题?

最佳答案

library(tidyverse)

data <- tibble(x = c(1, 1, 2), y = "a")
data
#> # A tibble: 3 × 2
#>       x y    
#>   <dbl> <chr>
#> 1     1 a    
#> 2     1 a    
#> 3     2 a

same_rows <-
  data %>%
  # consider all columns
  unite(col = "all") %>%
  transmute(same_as_next_row = all == lead(all))

data %>%
  bind_cols(same_rows)
#> # A tibble: 3 × 3
#>       x y     same_as_next_row
#>   <dbl> <chr> <lgl>           
#> 1     1 a     TRUE            
#> 2     1 a     FALSE           
#> 3     2 a     NA

reprex package 于 2022 年 3 月 30 日创建(v2.0.0)

library(tidyverse)

data <- tibble::tribble(
  ~id, ~number, ~Retention.time..min., ~Charge, ~m.z, ~Group,
  102864, 6947, 12.58028, 5, 375.0021, "Pro",
  68971, 60641, 23.36693, 2, 375.1373, "Pro",
  75001, 104156, 24.54187, 3, 375.1540, "Pro",
  87435, 146322, 22.69630, 3, 375.1540, "Pro",
  82658, 88256, 22.32042, 3, 375.1541, "Pro",
  113553, 97971, 14.54600, 3, 375.1566, "Pro"
)

data %>%
  mutate(
    matches_with_next_row = (abs(m.z - lead(m.z)) < 0.01) |
      (abs(Retention.time..min. - lead(Retention.time..min.)) < 1)
  )
#> # A tibble: 6 × 7
#>       id number Retention.time..min. Charge   m.z Group matches_with_next_row
#>    <dbl>  <dbl>                <dbl>  <dbl> <dbl> <chr> <lgl>                
#> 1 102864   6947                 12.6      5  375. Pro   FALSE                
#> 2  68971  60641                 23.4      2  375. Pro   FALSE                
#> 3  75001 104156                 24.5      3  375. Pro   TRUE                 
#> 4  87435 146322                 22.7      3  375. Pro   TRUE                 
#> 5  82658  88256                 22.3      3  375. Pro   TRUE                 
#> 6 113553  97971                 14.5      3  375. Pro   NA

reprex package 于 2022 年 3 月 30 日创建(v2.0.0)

关于r - 对于多行 (i+1) 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71673259/

相关文章:

r - 在 R 中,如何将文本环绕字符串中的所有单词,但特定单词(从左到右)?迭代和字符串操作

r - 对齐散点图和箱线图的 X 轴

r - normalizePath(path.expand(path), winslash, mustWork) : path[1] ="NA": The system cannot find the file specified 中的错误

c# - "Inline temporary variable"(IDE0019) 修复在与接口(interface)一起使用时导致语法错误

r - 每次都是相同的随机数

python - 为什么我可以在 for 循环中使用列表索引作为索引变量?

Python:比较不冗余的列表项

c - 我的 C 程序陷入了 for 循环

mySQL 触发器 - 我的语法有什么问题?

mysql - 是否有替代的 if-else 语法而不需要 endif