如何根据 R 中的标准计算新列?

问题描述 投票:0回答:1

假设我有数据:

ID <- c(1,2,3,1,2,3)
t <- c(1,1,1,2,2,2)
number <- c(0.5,0.4,0.1,0.3,0.25,0.45)
dat <- cbind(ID,t,number)

     ID t number
[1,]  1 1   0.50
[2,]  2 1   0.40
[3,]  3 1   0.10
[4,]  1 2   0.30
[5,]  2 2   0.25
[6,]  3 2   0.45

我要计算第四列:如果ID不为1,那么第四列的数字应该是数字×ID的数字=1。例如我想要的结果应该是

     ID t number  calc
[1,]  1 1   0.50    NA
[2,]  2 1   0.40 0.200
[3,]  3 1   0.10 0.050
[4,]  1 2   0.30    NA
[5,]  2 2   0.25 0.075
[6,]  3 2   0.45 0.135

其中 0.2=0.4×0.5、0.05=0.1×0.5、0.75=0.25×0.3、0.135=0.3×0.45

r
1个回答
0
投票

假设您可以将数据作为数据框,您可以这样做:

library(tidyverse)

ID <- c(1,2,3,1,2,3)
t <- c(1,1,1,2,2,2)
number <- c(0.5,0.4,0.1,0.3,0.25,0.45)
dat <- data.frame(ID,t,number)

dat %>%
  group_by(t) %>%
  mutate(calc = if_else(ID != 1, number * number[ID == 1], NA_real_)) %>%
  ungroup()

# A tibble: 6 x 4
     ID     t number   calc
  <dbl> <dbl>  <dbl>  <dbl>
1     1     1   0.5  NA    
2     2     1   0.4   0.2  
3     3     1   0.1   0.05 
4     1     2   0.3  NA    
5     2     2   0.25  0.075
6     3     2   0.45  0.135
© www.soinside.com 2019 - 2024. All rights reserved.