我有一个数据框,例如:
ID category value1 value2
1 A 2 5
1 A 3 6
1 A 5 7
1 B 6 **12**
2 A 1 3
2 A 2 5
2 B 5 **10**
现在,我想添加一个新列来计算百分比。对于每个ID,计算方法是使用类别A的每个value1划分类别B的value2。对于类别B的value1,它直接划分类别B的value2。预期结果如下:
ID category value1 value2 percentage
1 A 2 5 0.17
1 A 3 6 0.25
1 A 5 7 0.42
1 B 6 **12** 0.50
2 A 1 3 0.10
2 A 2 5 0.20
2 B 5 **10** 0.50
非常感谢您。
答案 0 :(得分:1)
使用dplyr
,您可以执行以下操作,假设根据您的示例,每个ID仅存在一个B类值:
library(dplyr)
df1 <- tibble(
ID = c(1,1,1,1,2,2,2),
category =c('A', 'A', 'A','B','A','A','B'),
value1 = c(2,3,5,6,1,2,5),
value2 = c(5,6,7,12,3,5,10)
)
df1 %>%
group_by(ID) %>%
mutate(percentage = value1 / value2[category == 'B'])
# # A tibble: 7 x 5
# # Groups: ID [2]
# ID category value1 value2 percentage
# <dbl> <chr> <dbl> <dbl> <dbl>
# 1 1 A 2 5 0.167
# 2 1 A 3 6 0.25
# 3 1 A 5 7 0.417
# 4 1 B 6 12 0.5
# 5 2 A 1 3 0.1
# 6 2 A 2 5 0.2
# 7 2 B 5 10 0.5