根据少数条件创建新变量
Creating new variable based on few conditions
在附图中,我想在 R 中创建两个组:如果任何 ID 的一半天数 >=90,return A 在新类别中,否则,return B 在新类别中。我还想 retain/return 所有其他变量。
enter image description here
抱歉,我是 R 的新手。
您可以尝试使用 dplyr
包进行以下操作。按 ID
分组后,通过将 days
大于或等于 90 的实例相加来创建 new_category
,然后查看是否大于 [=15] 的行的“一半” =].如果是,请将 new_category
设置为“A”(否则为“B”)。
set.seed(123)
library(dplyr)
df <- data.frame(
visit_date = Sys.Date() + sample(1:100, 9),
days = c(90, 30, 30, 120, 90, 20, 90, 90, 30),
ID = c(1,1,1,2,2,3,3,3,3)
)
df %>%
group_by(ID) %>%
mutate(new_category = ifelse(
sum(days >= 90) >= n()/2,
"A",
"B"
))
这是与基数 R 类似的方法:
df$new_category = ave(df$days,
df$ID,
FUN = function(x) ifelse(
sum(x >= 90) >= length(x) / 2,
"A",
"B")
)
输出
visit_date days ID new_category
1 2021-10-26 90 1 B
2 2021-12-13 30 1 B
3 2021-11-15 30 1 B
4 2021-10-09 120 2 A
5 2021-12-01 90 2 A
6 2021-11-06 20 3 A
7 2021-11-14 90 3 A
8 2021-11-07 90 3 A
9 2021-12-31 30 3 A
数据
df <- structure(list(visit_date = structure(c(18926, 18974, 18946,
18909, 18962, 18937, 18945, 18938, 18992), class = "Date"), days = c(90,
30, 30, 120, 90, 20, 90, 90, 30), ID = c(1, 1, 1, 2, 2, 3, 3,
3, 3), new_category = c("B", "B", "B", "A", "A", "A", "A", "A",
"A")), row.names = c(NA, -9L), class = "data.frame")
在附图中,我想在 R 中创建两个组:如果任何 ID 的一半天数 >=90,return A 在新类别中,否则,return B 在新类别中。我还想 retain/return 所有其他变量。
enter image description here
抱歉,我是 R 的新手。
您可以尝试使用 dplyr
包进行以下操作。按 ID
分组后,通过将 days
大于或等于 90 的实例相加来创建 new_category
,然后查看是否大于 [=15] 的行的“一半” =].如果是,请将 new_category
设置为“A”(否则为“B”)。
set.seed(123)
library(dplyr)
df <- data.frame(
visit_date = Sys.Date() + sample(1:100, 9),
days = c(90, 30, 30, 120, 90, 20, 90, 90, 30),
ID = c(1,1,1,2,2,3,3,3,3)
)
df %>%
group_by(ID) %>%
mutate(new_category = ifelse(
sum(days >= 90) >= n()/2,
"A",
"B"
))
这是与基数 R 类似的方法:
df$new_category = ave(df$days,
df$ID,
FUN = function(x) ifelse(
sum(x >= 90) >= length(x) / 2,
"A",
"B")
)
输出
visit_date days ID new_category
1 2021-10-26 90 1 B
2 2021-12-13 30 1 B
3 2021-11-15 30 1 B
4 2021-10-09 120 2 A
5 2021-12-01 90 2 A
6 2021-11-06 20 3 A
7 2021-11-14 90 3 A
8 2021-11-07 90 3 A
9 2021-12-31 30 3 A
数据
df <- structure(list(visit_date = structure(c(18926, 18974, 18946,
18909, 18962, 18937, 18945, 18938, 18992), class = "Date"), days = c(90,
30, 30, 120, 90, 20, 90, 90, 30), ID = c(1, 1, 1, 2, 2, 3, 3,
3, 3), new_category = c("B", "B", "B", "A", "A", "A", "A", "A",
"A")), row.names = c(NA, -9L), class = "data.frame")