如何将 less/equal 行中的值加到最后一个值(对于多行)?

How to sum values in a row that are less/equal to the last value (for multiple rows)?

我正在尝试计算 2021 年相对于 June/July/August 平均温度的 1981-2021 年气候学的百分位排名。我的数据如下所示,但更大:

1981 1982 1983 2021
22 34 40 42
25 36 32 33

对于每一行,我需要计算低于或等于 2021 年值的值的数量。因此,对于第一行,它将是三个,因为所有值都小于 42,而第二行将等于 2。

我已经编写了一些代码来尝试执行此操作,但我遇到的问题是让函数为每一行使用 2021 值,而不仅仅是一个值。

L = <- apply(Temperature_df[,(3:50)],1,function(x) 

{
    sum(x <= Temperature_df[,50]) #50 is the 50th column which is always 2021

})

# the function works if I compare each row to one value of 2021: 
  sum(x <= Temperature_df[1,50]), but I need to sum the values of 
  each row against the 2021 value for that row. 

如有任何想法,我们将不胜感激。

一个简单的rowSums就可以了。注意2021列的提取方式,用double [[.

Temperature_df <- read.table(text = "
1981    1982    1983    2021
22  34  40  42
25  36  32  33
", header = TRUE, check.names = FALSE)

col2021 <- 4
Temperature_df[-col2021] <= Temperature_df[[col2021]]
#>      1981  1982 1983
#> [1,] TRUE  TRUE TRUE
#> [2,] TRUE FALSE TRUE

rowSums(Temperature_df[-col2021] <= Temperature_df[[col2021]])
#> [1] 3 2

reprex package (v2.0.1)

于 2022-03-18 创建