我有一个数据库,其中包含AgeyearBirth Order 1Birth Order 2Parity 0Parity 1列。对于每个订单,我都有一个出生订单列,直到8,而奇偶校验列直到7。
我需要划分Birth Order 1/Parity 0; Birth Order 2/Parity 1 ...以及更多估算我的费用。

这是我的数据库,只是一个示例。

year <- c(1998, 1999, 2000, 2010)
Age <- c(15, 16, 17, 18)
'Birth Order 1' <- c(10, 25, 25, 35)
'Parity 0' <- c(100, 150, 140, 150)
'Birth Order 2' <- c(5, 10, 10, 30)
'Parity 1' <- c(110, 160, 150, 150)

mat <- data.frame(year, Age, `Birth Order 1`, `Birth Order 2`, `Parity 0`, `Parity 1`)


我已经使用简单的代码完成了此操作,但是我想使用命令来优化脚本。
mat <- mat %>%
  mutate(mat1 = `Birth Order 1`/`Parity 0`,
         mat2 = `Birth Order 2`/`Parity 1`,
         mat3 = `Birth Order 3`/`Parity 2`,
         mat4 = `Birth Order 4`/`Parity 3`,
         mat5 = `Birth Order 5`/`Parity 4`,
         mat6 = `Birth Order 6`/`Parity 5`) %>%
  select("AGE", "year", starts_with("mat"))

我的预期结果是:
year    Age mat1              mat2
1998    15  0.1         0.04545455
1999    16  0.1666667   0.0625
2000    17  0.1785714   0.06666667
2010    18  0.2333333   0.2

最佳答案

一个相当简单的解决方案:


year <- c(1998, 1999, 2000, 2010)
Age <- c(15, 16, 17, 18)
'Birth Order 1' <- c(10, 25, 25, 35)
'Parity 0' <- c(100, 150, 140, 150)
'Birth Order 2' <- c(5, 10, 10, 30)
'Parity 1' <- c(110, 160, 150, 150)

mat <- data.frame(year, Age, `Birth Order 1`, `Birth Order 2`, `Parity 0`, `Parity 1`)

for(i in 1:2){
    mat[[paste0("mat",i)]] <- mat[[paste0("Birth.Order.",i)]]/mat[[paste0("Parity.",i-1)]]
}

mat

#  year Age Birth.Order.1 Birth.Order.2 Parity.0 Parity.1      mat1       mat2
#1 1998  15            10             5      100      110 0.1000000 0.04545455
#2 1999  16            25            10      150      160 0.1666667 0.06250000
#3 2000  17            25            10      140      150 0.1785714 0.06666667
#4 2010  18            35            30      150      150 0.2333333 0.20000000

关于r - 我应该如何使用数据库中的先前列来创建新变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57102962/

10-12 17:19