如何根据其他值计算值?

时间:2019-07-17 19:07:29

标签: r

我有一个数据框,例如:

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

非常感谢您。

1 个答案:

答案 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