【问题标题】:Is there code to determine the amount of criteria met by a row in R?是否有代码来确定 R 中的一行满足的条件数量?
【发布时间】:2020-03-12 02:23:41
【问题描述】:

我试图找出一种方法来分配一个列,该列将列出某一行满足的条件数量。例如,我正在查看某人遇到了多少心脏病风险因素,并尝试对这些值进行序数回归。我试过了

cvd_status <- ifelse( data_tot$X5_A_01_d_Heart.Disease=="1"|data_tot$X5_A_01_e_Stroke=="1"|data_tot$X5_A_01_f_Chronic.Kidney.Disease==1, 1,0) 

但这只能告诉我人们是否有任何风险因素,而不是他们有多少风险因素。有什么方法可以计算出一个人会有多少风险因素?

编辑:变量不是简单的二进制,而是 1 或 2 或数字范围。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。

标签: r


【解决方案1】:

如果变量只包含 0 或 1,则可以使用以下内容:

with(data_tot,
     rowSums(cbind(X5_A_01_d_Heart.Disease, 
                   X5_A_01_e_Stroke,
                   X5_A_01_f_Chronic.Kidney.Disease))
)

编辑

如果它们被编码为 1(是)和 2(否),加上如果要包括血压和胆固醇水平等其他风险因素,并且这些风险因素变量中没有缺失值,那么您'll 可以使用类似于以下的内容:

data_tot %>%
  mutate(CVD_Risk.Factors=
           (Heart == 1) + 
           (Stroke == 1) + 
           (CKD == 1) +
           (Systolic_BP  >= 130) + (Diastolic_BP >= 80) +
           (Cholesterol > 150))

  Heart Stroke CKD Systolic_BP Diastolic_BP Cholesterol CVD_Risk.Factors
1     1      1   2         118           90         200                4
2     2      1   2         125           65         150                1
3     2      1   1         133           95         190                5
4     1      1   2         120           87         250                4
5     2      2   2         155          110          NA               NA
6     2      2   2         130          105         140                2

您可以看到,如果有任何缺失值,那么这将不起作用。一种解决方案是使用rowwise,然后使用sum

data_tot %>%
  rowwise() %>%  # This tells R to apply a function by the rows of the selected inputs
  mutate(CVD_Risk.Factors=sum(  # This function has an "na.rm" argument
           (Heart == 1), 
           (Stroke == 1), 
           (CKD == 1),
           (Systolic_BP  >= 130), (Diastolic_BP >= 80),
           (Cholesterol > 150), na.rm=TRUE))  # Omit NA in the summations

# A tibble: 6 x 7
  Heart Stroke   CKD Systolic_BP Diastolic_BP Cholesterol CVD_Risk.Factors
  <dbl>  <dbl> <dbl>       <dbl>        <dbl>       <dbl>            <int>
1     1      1     2         118           90         200                4
2     2      1     2         125           65         150                1
3     2      1     1         133           95         190                5
4     1      1     2         120           87         250                4
5     2      2     2         155          110          NA                2 # not NA
6     2      2     2         130          105         140                2

数据

data_tot <- data.frame(Heart=c(1,2,2,1,2,2),
                       Stroke=c(1,1,1,1,2,2),
                       CKD=c(2,2,1,2,2,2),
                       Systolic_BP=c(118,125,133,120,155,130),
                       Diastolic_BP=c(90,65,95,87,110,105),
                       Cholesterol=c(200,150,190,250,NA,140))

【讨论】:

  • 如果变量不是简单的二进制,有没有办法做到这一点?
  • 它们是什么?
  • 对于上述变量,它们要么是 1,要么是 2,或者是线性标度,如血压或胆固醇。对于后者,我想知道该行的值是高于还是低于设定值。
  • 啊,这有很大的不同。如果任何变量中有 NA,请查看我编辑的代码,它提供了两个选项。让我知道它是否有效。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2017-10-13
相关资源
最近更新 更多