【问题标题】:is there a way to count columns in an array based on a condition?有没有办法根据条件计算数组中的列?
【发布时间】:2019-08-28 16:58:18
【问题描述】:

我有一个数据集,其中包含有关对患者的多种医疗状况进行诊断的数据。这些维度/列中的值是 NA(患者未在诊断过程中)、1 = 是(诊断出该病症)、2 = 否(未诊断出该病症)。我想创建一个单独的列来计算每个患者 ID 为 1 的列数。我的数据框有 1000 个单独的维度,我需要根据列的索引或列名专门选择。我的数据集是这样的

ID    A   B  C  D

1    NA   1  2  1

2    1    1  2  1

3    NA   2  2  1

4    1    1  2  1

5    2    1  1  1

6    2    1  NA 1

我显然有比这更多的列和行,任何解决方案都需要考虑索引。我需要这样做的原因是要了解患者患有的疾病数量。我能够使用“转换”选项在 SPSS 中解决这个问题,因为 SPSS 是我选择的数据分析应用程序。我一直在享受 R 并且对其中可用的统计学习算法的数量很感兴趣。

我已经尝试了apply 函数和colSums,但我在索引以及设置计数函数 = +1 方面遇到了困难。我也研究了 for 循环,但没有解决我的具体问题。

【问题讨论】:

标签: r dataframe count


【解决方案1】:

mydata$count <- apply(X=mydata[,-1],1,FUN=function(x) length(which(x=='1')))

使用[,-1] 会忽略 ID 变量

【讨论】:

  • 像桃子一样工作。我还有一个问题,我如何忽略从 1 到 15 和 39 到 60 的变量。我尝试了类似“X=mydata[-1:-15, -38:-50]...”的方法,但给了我错误提示“$<-.data.frame(*tmp*, count, value = c(4L, 4L, 5L, 5L, 3L, : 替换有 7396 行,数据有 7403) 中的错误。我该如何处理?我是新的所以请原谅我问了一个看起来很糟糕的问题。非常感谢您的帮助!
  • 您可以选择要包含的列号,而不是使用负索引。
  • 但是,您的负索引看起来像这样:mydata$count <- apply(X=mydata[,-c(1:15,38:50)],1,FUN=function(x) length(which(x=='1')))
【解决方案2】:

欢迎来到 SO。从我的角度来看,你需要做的是将你的数据格式从“宽”转换为“长”(查看整洁的数据:https://vita.had.co.nz/papers/tidy-data.pdf)。

library(tidyverse)

df <- read.table(header = TRUE, 
text = "
ID    A   B  C  D

1    NA   1  2  1

2    1    1  2  1

3    NA   2  2  1

4    1    1  2  1

5    2    1  1  1

6    2    1  NA 1")

df %>%
 gather(key = "patient", value = "type", A:D) %>%
 mutate(contains_1 = ifelse(type == 1, "yes", "no"))

   ID patient type contains_1
1   1       A   NA       <NA>
2   2       A    1        yes
3   3       A   NA       <NA>
4   4       A    1        yes
5   5       A    2         no
6   6       A    2         no
7   1       B    1        yes
8   2       B    1        yes
9   3       B    2         no
10  4       B    1        yes
11  5       B    1        yes
12  6       B    1        yes
13  1       C    2         no
14  2       C    2         no
15  3       C    2         no
16  4       C    2         no
17  5       C    1        yes
18  6       C   NA       <NA>
19  1       D    1        yes
20  2       D    1        yes
21  3       D    1        yes
22  4       D    1        yes
23  5       D    1        yes
24  6       D    1        yes

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 2021-12-15
    • 1970-01-01
    • 2021-05-23
    • 2011-07-25
    • 2016-09-06
    • 2018-02-24
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多