【问题标题】:How to sum values in one column based on values in other columns R?如何根据其他列 R 中的值对一列中的值求和?
【发布时间】:2021-10-16 02:29:14
【问题描述】:

我有一个数据集,其中包含对 26 个问题的数百个参与者和控制响应。 每个参与者都有 26 个与他们相关的问题,他们回答是 (1)、否 (-1)、可能 (0) 或没有回答 (NA)

对于每个参与者,我想总结他们对所有 26 个问题的所有具体回答,并将其保存到一个新列中。 因此,如果他们在 26 次中有 12 次回答是 (1),那么新列中应该包含数字 12——忽略否 (-1) 值。

我尝试过 for 循环、if else 语句、子设置、group by 和 sum 等。我只是不知道如何循环遍历 26 个问题中的每一个问题并只对他们的问题求和 - 忽略其他参与者。

编辑:这是代码外观的代表性示例。

      ID PatientResponse ControlResponse QuestionNumber
1 122047               1               0              1
2 123274              -1              -1              1
3 186223               1               1              1
4 122047               0              -1              2
5 123274               1              -1              2
6 186223              -1               0              2

以下是针对不同参与者的一个问题的图片:https://i.stack.imgur.com/ojGGO.png

在为每位参与者总结了所有 26 个问题后,我希望它的理想外观如下:https://i.stack.imgur.com/W6Qo3.png

【问题讨论】:

  • 能否请您使用dput 显示示例数据而不是图像

标签: r sum tidyverse


【解决方案1】:
library(dplyr); library(tidyr)

# this will give the count of each kind of response in its own column
df %>%
  count(Question, Participant, Control) %>%
  pivot_wider(names_from = Control, values_from = n)

#if you just want Yes's counted
df %>%
  group_by(Question, Participant) %>%
  summarize(Summed_Yes_Responses = sum(Control == 1, na.rm = TRUE)) 

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2021-01-09
    • 2020-11-12
    • 2021-01-26
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多