r语言 - 按参照组划分不同的组



我到目前为止有这个df:(不是列result):

df <- data.frame(number = c(1,1,1,1,2,2,2,2,3,3,3,3),
value1 = c(5,7,6,9,3,5,6,3,4,5,5,6),
group = c("control", "Treated1", "Treated2", "Treated3","control", "Treated1", "Treated2", "Treated3","control", "Treated1", "Treated2", "Treated3"),
result = c(1,1.4,1.2,1.8,1.0,1.67,2,1,1,1.25,1,1.2))
number value1    group result
1       1      5  control   1.00
2       1      7 Treated1   1.40
3       1      6 Treated2   1.20
4       1      9 Treated3   1.80
5       2      3  control   1.00
6       2      5 Treated1   1.67
7       2      6 Treated2   2.00
8       2      3 Treated3   1.00
9       3      4  control   1.00
10      3      5 Treated1   1.25
11      3      5 Treated2   1.00
12      3      6 Treated3   1.20

我想按数字和组对数据进行分组,然后将group的每个子组与同一number组的control分开,但我正在努力存档这个。例如

Line1: 5/5 = 1.0
Line2: 7/5 = 1.40
Line3: 6/5 = 1.20
Line4: 9/5 = 1.80
Line5: 3/3 = 1.0

我试过这样做(显然不起作用):

library(dplyr)
df <- df %>%
group_by(number) %>%
mutate(result = value1[group == contains("Treated")] / value1[group == control)

你有什么想法吗?

您可以索引包含group == "control"value1,并用此值除所有其他value1

library(dplyr)
df %>% group_by(number) %>% mutate(result = value1/value1[group == "control"])

或者您可以将group列改为arrange,以便"控制";将始终是first的值。

df %>% group_by(number) %>% 
arrange(number, group) %>% 
mutate(result = value1/first(value1))

输出
# A tibble: 12 × 4
# Groups:   number [3]
number value1 group    result
<dbl>  <dbl> <chr>     <dbl>
1      1      5 control    1   
2      1      7 Treated1   1.4 
3      1      6 Treated2   1.2 
4      1      9 Treated3   1.8 
5      2      3 control    1   
6      2      5 Treated1   1.67
7      2      6 Treated2   2   
8      2      3 Treated3   1   
9      3      4 control    1   
10      3      5 Treated1   1.25
11      3      5 Treated2   1.25
12      3      6 Treated3   1.5 

最新更新