我有一个数据集,其中包含有关患者多种医学状况的诊断数据。这些维度/列中的值是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方面感到吃力。我也一直在寻找循环问题,但对我的具体问题却不走运。
答案 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