【问题标题】:How do I combine 6 categorical (yes/no) variables into 1 umbrella categorical variable (yes/no)如何将 6 个分类(是/否)变量组合成 1 个伞形分类变量(是/否)
【发布时间】:2020-06-25 20:56:12
【问题描述】:

我有一个像下面这样的数据集:

bleed  breathing  ascites   spleen  Hepato
Yes      Yes         No       Yes    No
No       Yes         No       Yes    No
No       No          Yes      Yes    No

我需要创建一个新的伞形变量来描述 5 个分类变量。只要患者在 5 个分类变量中的任何一个中有“是”(并发症),他/她就应该在新的总括变量中获得“是”(即它们属于新类别)。仅当此人在 5 个类别中的所有类别中都为“否”时,他们才能在新的总类别中获得“否”。

提前致谢。

【问题讨论】:

    标签: r categorical-data


    【解决方案1】:

    我们可以在逻辑 matrix 上使用 rowSums 来获得每个 TRUE/FALSE 结果的总和。创建一个逻辑向量> 0,将 1 加到 TRUE/FALSE 上,转换为 2/1,这可以用作索引以替换为新值向量(“否”、“是”)

    df1$umbrella <- c("No", "Yes")[(rowSums(df1 == "Yes") > 0) + 1]
    df1$umbrella
    #[1] "Yes" "Yes" "Yes"
    

    或者另一个选项是Reducelapply

    df1$umbrella <- c("No", "Yes")[(Reduce(`|`, lapply(df1, `==`, "Yes"))) + 1]
    

    apply

    c("No", "Yes")[1 + apply(df1 == "Yes", 1, FUN = any)]
    

    数据

    df1 <- structure(list(bleed = c("Yes", "No", "No"), breathing = c("Yes", 
    "Yes", "No"), ascites = c("No", "No", "Yes"), spleen = c("Yes", 
    "Yes", "Yes"), Hepato = c("No", "No", "No")), class = "data.frame", 
    row.names = c(NA, 
    -3L))
    

    【讨论】:

    • 感谢您的及时回复。我是 R 的新手,所以我需要你澄清一下。如果我想使用您的这些代码,请使用我的数据集的变量名称。它应该看起来像这样,对吧? - dataset$umbrella = c("No", "Yes")[1 + apply(dataset$bleed == "Yes", 1, FUN = any)] dataset$umbrella = c("No", "Yes") [1 + apply(dataset$ascites == "是", 1, FUN = any)]
    • @ShakilAhmedShaon 这里,df1是对象名称。如果您的数据集名称是mtcars,则应将“df1”替换为mtcars,即您可能已经阅读过yourdata &lt;- read.csv('file.csv') 这样的数据,然后yourdata 是对象名称
    • @ShakilAhmedShaon 如果dataset 是对象名称,是的,它就是代码。但是你改了我的代码,买一列提取然后用apply,不行
    • @ShakilAhmedShaon。在您的情况下,它将是apply(dataset == "Yes", 1, FUN = any)。如果您提取一列,它是一个向量,apply 用于矩阵或 data.frame
    • 我使用了以下命令:(r = 我的数据集的名称)r$compli = c("No", "Yes")[apply(r$Bleeding == "Yes", 1, FUN = any)] 我收到以下错误消息:Error in apply(r$Bleeding == "Yes", 1, FUN = any) : dim(X) must have a positive length
    猜你喜欢
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多