假设我有数据:
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
假设您可以将数据作为数据框,您可以这样做:
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