如何在 R 中创建一个新列,其中包含数据集中另一列中的观察计数?

How can I create a new column in R with a count of observations in another column in the dataset?

我在 R 中有一个数据集,其中包含有关个人和诊断的信息。变量是组、年龄、体重、身份和诊断。因此,一个人可以在诊断中有一行带有 X(意味着没有诊断),或者有一行或多行有诊断。现在我想用每个人得到的诊断数量创建一个新变量,这样每个人在数据集中都有一行,其中包含变量组、年龄、体重、ID 和诊断数量。在这个新的诊断专栏中,我希望没有诊断的个体获得数字 0,有一个诊断的数字为 1,有两个诊断的数字为 2 等等。谁能帮帮我?

我正在使用 R。我尝试使用 group_bycount 但我无法获得数字 0没有诊断的个体(诊断列中的 X),我看不到其他变量,如组、年龄和体重。

这是数据:

pr <- read_csv("~/Desktop/Data.csv")
head(pr)

Data

dput(pr)

structure(list(GROUP = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 
3, 3, 3, 3, 4, 4, 4), AGE = c(23, 34, 61, 23, 45, 34, 34, 55, 
56, 43, 56, 49, 61, 49, 74, 49, 51, 46, 75), WEIGHT = c(56, 72, 
70, 56, 101, 72, 72, 62, 60, 78, 60, 55, 79, 55, 89, 55, 67, 
60, 105), ID = c(4, 1, 2, 4, 3, 1, 1, 5, 7, 6, 7, 8, 9, 8, 10, 
8, 11, 12, 13), DIAGNOSIS = c("J01", "J01", "X", "J01", "J01", 
"J01", "J01", "J01", "J01", "J01", "J01", "J01", "X", "J01", 
"J01", "J01", "X", "J01", "J01")), class = c("spec_tbl_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -19L), spec = structure(list(
    cols = list(GROUP = structure(list(), class = c("collector_double", 
    "collector")), AGE = structure(list(), class = c("collector_double", 
    "collector")), WEIGHT = structure(list(), class = c("collector_double", 
    "collector")), ID = structure(list(), class = c("collector_double", 
    "collector")), DIAGNOSIS = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))

所需输出的图片: Desired output

解决这个问题的一种方法是 group_by 多列,如果信息对给定的个人重复(在本例中就是这样做的)。最后,您将在结果中获得这些列。此外,您可以 summarise 其中 DIAGNOSIS 不是“X” - 而不是 count,这样在 DIAGNOSIS 是“X”的情况下您将得到零。

library(dplyr)

pr %>%
  group_by(GROUP, ID, AGE, WEIGHT) %>%
  summarise(NUMBER = sum(DIAGNOSIS != "X"))

输出

   GROUP    ID   AGE WEIGHT NUMBER
   <dbl> <dbl> <dbl>  <dbl>  <int>
 1     1     1    34     72      3
 2     1     2    61     70      0
 3     1     3    45    101      1
 4     1     4    23     56      2
 5     2     5    55     62      1
 6     2     6    43     78      1
 7     2     7    56     60      2
 8     3     8    49     55      3
 9     3     9    61     79      0
10     3    10    74     89      1
11     4    11    51     67      0
12     4    12    46     60      1
13     4    13    75    105      1