【问题标题】:How to calculate the value based on the other value?如何根据其他值计算该值?
【发布时间】:2019-07-17 19:07:29
【问题描述】:

我有一个数据框,例如:

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

非常感谢。

【问题讨论】:

  • 第 4 行和第 7 行的计算与您的描述不符,因为这些商中的分子不是 A 类分子。
  • library(data.table); setDT(mdt)[, percentage:= value1/value2[category == "B"], by="ID"][]
  • @John Coleman,已更改。

标签: r


【解决方案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  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2022-07-08
    • 1970-01-01
    • 2018-12-27
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多