将一列除以另一列的先前值

时间:2018-02-06 07:35:55

标签: r

Get-ADUser -filter * -properties passwordlastset, passwordneverexpires | sort-object name | select-object Name, passwordlastset, passwordneverexpires | Export-csv -path c:\temp\user-password-info-20131119.csv

在r中,如何将列B的值除以列A的前一行值

喜欢3/10和4/30

4 个答案:

答案 0 :(得分:3)

使用Base R:

 transform(dat,new=c(NA,head(column_a,-1))/column_b)
  column_a column_b      new
1       10        2       NA
2       30        3 3.333333
3       40        4 7.500000

答案 1 :(得分:0)

您可以使用lead()中的lag()dplyr,它会在向量中找到下一个或上一个值:

library(dplyr)
df <- data.frame(a = c(10, 30, 40),
                 b = c(2, 3, 4)) 

第一个选项:lead()

lead(df$b) / df$a

返回

[1] 0.3000000 0.1333333        NA

第二个选项:lag()

df$b / lag(df$a)

返回

[1]        NA 0.3000000 0.1333333

答案 2 :(得分:0)

像这样,

dta <- data.frame(column_a = c(10, 30, 40), column_b = c(2, 3, 4))
# install.packages(c("tidyverse""), dependencies = TRUE)
library(tidyverse)    
tbl <- dta %>% as_tibble() 
mutate(tbl, column_a_lag = lag(column_a), a_lag_div_b = column_a_lag/column_b)
#> # A tibble: 3 x 4
#>   column_a column_b column_a_lag a_lag_div_b
#>      <dbl>    <dbl>        <dbl>       <dbl>
#> 1       10        2           NA          NA
#> 2       30        3           10    3.333333
#> 3       40        4           30    7.500000

不经意地,你也可以直接去那里

tbl  %>% mutate(lag_a = lag(column_a)/column_b, lead_b = column_a/lead(column_b))
#> # A tibble: 3 x 4
#>   column_a column_b    lag_a   lead_b
#>      <dbl>    <dbl>    <dbl>    <dbl>
#> 1       10        2       NA 3.333333
#> 2       30        3 3.333333 7.500000
#> 3       40        4 7.500000       NA

我想回应Sotos&#39;以上评论。通常很好地证明你已经付出了一些努力。此外,您应始终努力提供a complete minimal reproducible example以继续您的问题。我们可以使用的东西,用于向您展示如何回答您的问题。我还建议看一下这篇文章; how do I ask a good question,但由于您是网站新手,我们会尽力帮助您入门。

答案 3 :(得分:0)

使用data.table

 dt[ , new:= column_b /  shift(column_a)]

  column_a column_b       new
1:       10        2        NA
2:       30        3 0.3000000
3:       40        4 0.1333333