如何在 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_by 和 count 但我无法获得数字 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
我在 R 中有一个数据集,其中包含有关个人和诊断的信息。变量是组、年龄、体重、身份和诊断。因此,一个人可以在诊断中有一行带有 X(意味着没有诊断),或者有一行或多行有诊断。现在我想用每个人得到的诊断数量创建一个新变量,这样每个人在数据集中都有一行,其中包含变量组、年龄、体重、ID 和诊断数量。在这个新的诊断专栏中,我希望没有诊断的个体获得数字 0,有一个诊断的数字为 1,有两个诊断的数字为 2 等等。谁能帮帮我?
我正在使用 R。我尝试使用 group_by 和 count 但我无法获得数字 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