有没有一种方法可以根据条件对数组中的列进行计数?

时间:2019-08-28 16:58:18

标签: r dataframe count

我有一个数据集,其中包含有关患者多种医学状况的诊断数据。这些维度/列中的值是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,并且对R中可用的统计学习算法的数量很感兴趣。

我已经尝试过apply函数和colSums函数,但是我在为索引以及设置计数函数= +1方面感到吃力。我也一直在寻找循环问题,但对我的具体问题却不走运。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

欢迎来到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