将观测数据指标转换为每个ID的面板格式(dplyr)

6pp0gazn  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(85)

我有一个基于reddit帖子的数据,其中每行代表一个reddit帖子,以及用户名和是否写帖子的月份。我还有一个二进制变量,"集体行动,如果帖子包含集体行动呼叫则编码为1,否则编码为0。以及另一个变量"directed_to_whom",其预测帖子针对谁然而,我正试图将这些措施转换成小组形式,在用户名一级而不是每个职位上进行衡量。
我有一个变量"id"来唯一地标识每个用户名,对于"集体行动"指标,我感兴趣的是计算用户名埃里克·卡特曼写的帖子中包含集体行动的比例。例如,如果埃里克·卡特曼在reddit上写了7篇帖子,但其中只有5篇被标记为包含集体行动,那么Cartman将具有0.71 = 5个集体行动帖子/7个总帖子的集体行动比例。类似地,如果Cartman仅在7个帖子中的4个中提到国会,那么用户名Cartman的国会比例将是0.571 = 4次提到大会/7个员额总数。
下面是一个数据示例:

dput(df[1:10,c(1,4,7,8,14)]) # Print data example with specific columns

输出:

structure(list(id = c(213L, 365L, 411L, 192L, 154L, 443L, 453L, 
462L, 213L, 213L), username = c("Cartman", "Cartman", 
"Cartman", "Kyle profleski", "Kyle profleski", 
"Cartman", "Kyle profleski Kyle profleski", "Kyle profleski", 
"Cartman", "Cartman"), collective_action = c(0, 1, 0, 0, 
1, 1, 0, 0, 0, 1), directed_to_whom = c("Congress", 
"Congress", "Senate", "Congress", "Congress", "president", 
"president", "Senate", "Congress", "Senate"), month_year = structure(c(2011.41666666667, 
2011.41666666667, 2011.41666666667, 2011.41666666667, 2011.41666666667, 
2011.41666666667, 2011.41666666667, 2011.41666666667, 2011.41666666667, 
2011.41666666667), class = "yearmon")), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L), groups = structure(list(
    uusername = c("Cartman", "Cartman", 
"Cartman", "Kyle profleski", "Kyle profleski", 
"Cartman", "Kyle profleski Kyle profleski", "Kyle profleski", 
"Cartman", "Cartman"), .rows = structure(list(
        5L, 4L, c(1L, 9L, 10L), 2L, 3L, 6L, 7L, 8L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -8L), .drop = TRUE))

我的预期输出如下所示,其中"direc_to_Congress__prop"度量每个用户名中指向某个给定对象(如参议院、国会等)的提及比例,例如,创建一个列,严格度量Cartman在reddit上所有帖子中提及国会的比例。

id.    username        collec_action_prop   direc_to_Congress__prop
521.   Cartman            0.71                        0.57
501.   Mr.Mackey            0.4                       .32
499    Kyle profleski       0.3                       0.09
sxissh06

sxissh061#

感谢@Ben的建议,以下是这两个变量的解:

这里我正在计算用户名为Eric Cartman的帖子中提到集体行动的比例。

df%>% ungroup %>% group_by(username) %>% 
  summarise(collective_action_prop = sum(collective_action) / n())

在这里,我测量的是由特定用户名撰写的帖子在“指向谁”指标中指向给定内容的提及比例

df%>% ungroup %>% group_by(username) %>% summarise(prop_Congress = sum(directed_to_whom == "Congress") / n())

相关问题