r语言 - 根据数据帧中每组的 xy 坐标计算斜率



我有一个xydata.frame,以及其他factor,例如:

df <- data.frame(y = c(0.05, -0.03, -0.13, -0.24, 0.05, -0.03, -0.13, -0.24, 0.59, 1.97, 2.26, 1.89, 0.59, 1.97, 2.26, 1.89),
x = c(0, 1.58, 2, 4.58, 0, 1.58, 2, 4.58, 0, 1.58, 2, 4.58, 0, 1.58, 2, 4.58),
sex = c('F', 'F', 'F', 'F', 'M', 'M', 'M', 'M', 'F', 'F', 'F', 'F', 'M', 'M', 'M', 'M'),
group = c('B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'))

我正在寻找一个function(可能使用dplyr效果最好(,它将计算斜率(即每对连续x点之间的y差除以x之差(,对于df中每个因素的每个水平。在本例中,我将有 4 组斜率:用于group = Asex = Fgroup = Asex = Mgroup = Bsex = F,以及用于group = Bsex = M

如果可能,如果解决方案是通用的,以便它适用于比此示例中指定的更多的factors(条件是所有因素都属于类factor(,那就太好了。

知道吗?

为了使用dplyr找到斜率(根据您的定义(,lag()函数可能会有用。

leadlag功能:

在向量中查找"下一个"或"上一个"值。用于比较当前值之前或后面的值。

要实现按因子变量分组,可以先使用dplyr::group_by()。这是可泛化的,可以接受一个或多个分组变量。

下面是一个可重现的示例,显示了每个组的此计算。

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
df <- data.frame(y = c(0.05, -0.03, -0.13, -0.24, 0.05, -0.03, -0.13, -0.24, 0.59, 1.97, 2.26, 1.89, 0.59, 1.97, 2.26, 1.89),
x = c(0, 1.58, 2, 4.58, 0, 1.58, 2, 4.58, 0, 1.58, 2, 4.58, 0, 1.58, 2, 4.58),
sex = c('F', 'F', 'F', 'F', 'M', 'M', 'M', 'M', 'F', 'F', 'F', 'F', 'M', 'M', 'M', 'M'),
group = c('B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'))
df %>% 
group_by(sex, group) %>% 
mutate(slope = (y - lag(y)) / (x - lag(x)))
#> # A tibble: 16 x 5
#> # Groups:   sex, group [4]
#>          y     x sex   group    slope
#>      <dbl> <dbl> <fct> <fct>    <dbl>
#>  1  0.0500  0.   F     B      NA     
#>  2 -0.0300  1.58 F     B      -0.0506
#>  3 -0.130   2.00 F     B      -0.238 
#>  4 -0.240   4.58 F     B      -0.0426
#>  5  0.0500  0.   M     B      NA     
#>  6 -0.0300  1.58 M     B      -0.0506
#>  7 -0.130   2.00 M     B      -0.238 
#>  8 -0.240   4.58 M     B      -0.0426
#>  9  0.590   0.   F     A      NA     
#> 10  1.97    1.58 F     A       0.873 
#> 11  2.26    2.00 F     A       0.690 
#> 12  1.89    4.58 F     A      -0.143 
#> 13  0.590   0.   M     A      NA     
#> 14  1.97    1.58 M     A       0.873 
#> 15  2.26    2.00 M     A       0.690 
#> 16  1.89    4.58 M     A      -0.143

创建于 2018-09-03 由 reprex 包 (v0.2.0(.

最新更新