簡體   English   中英

根據少數條件創建新變量

[英]Creating new variable based on few conditions

在附圖中,我想在R中創建兩個組:如果任何ID的一半天數> = 90,則在新類別中返回A,否則在新類別中返回B。 我還想保留/返回所有其他變量。

在此處輸入圖像描述

抱歉,我是 R 的新手。

您可以使用dplyr package 嘗試以下操作。按ID分組后,通過添加days數大於或等於 90 的實例來創建new_category ,然后查看是否大於該ID行的“一半”。 如果是,將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")
                      )

Output

  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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM