【问题标题】:Performing an operation by group in R在 R 中按组执行操作
【发布时间】:2021-07-01 08:02:42
【问题描述】:

这是我的数据

resolution <- c(1:9)
country <- c("Afg", "Afg", "Afg", "Bel", "Bel", "Bel", "Chi", "Chi", "Chi")
year <- c(2015,2015,2015,2016,2016,2016,2017,2017,2017)
vote <- c(1,0,0.5,1,1,0,0,1.5,1)
df <- cbind.data.frame(country, year, resolution, vote)

我想计算一个名为巧合的新变量,它为每个国家/地区执行以下代数运算:

coincidence(country) = number of 1s times 1 + number of 0.5s times 0.5
coincidence(afg) = ((1*1) + (1*0.5)) = 1.5

即,它计算每个国家/地区所有年份的 1 和 0.5 的数量,然后将它们相加。由于我对阿富汗有一个 1 和一个 0.5,因此巧合应该是 1.5、1.5、1.5(每个国家所有年份的巧合值应该相同)。

【问题讨论】:

  • Tidyverse 的 group_by() 是做你想做的事的一种方式。

标签: r dplyr panel-data


【解决方案1】:

这行得通吗:

library(dplyr)

df %>% group_by(country) %>% mutate(coincidence = sum(vote==1) + sum(vote == 0.5) *0.5)
# A tibble: 9 x 5
# Groups:   country [3]
  country  year resolution  vote coincidence
  <chr>   <dbl>      <int> <dbl>       <dbl>
1 Afg      2015          1   1           1.5
2 Afg      2015          2   0           1.5
3 Afg      2015          3   0.5         1.5
4 Bel      2016          4   1           2  
5 Bel      2016          5   1           2  
6 Bel      2016          6   0           2  
7 Chi      2017          7   0           1  
8 Chi      2017          8   1.5         1  
9 Chi      2017          9   1           1  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-15
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多