[英]Merging binary variables in R to a new variable
我有三个分类变量,即中风、MI 和 BP,其值为 0 = 是和 1 = 否。我想将它们合并以从这三个变量中创建一个新变量“cvd”,其中每行 0 得到 0 值在新心血管变量。 例如:
Stroke MI BP CVD
0 1 1 0
1 1 1 1
1 1 0 0
我尝试了以下代码,但这不是我想要的
transform(koratest, cvd=paste(stroke,MI, BP))
有人可以帮忙看看这可能是什么脚本吗?
最好的,
感谢您提供所有解决方案。 如果要合并的任何值中存在缺失值怎么办。 我希望将缺失值标记为 1,但如果缺失值为 0,我希望 cvd 变量的值为 1。例如:
Stroke MI BP CVD
0 1 1 0
1 NA NA 1
0 NA 1 0
我怎样才能实现这样的输出?
尝试,
(rowSums(df) == ncol(df)) * 1
#[1] 0 1 0
另一种方式:
library(dplyr)
df <- data.frame(Stroke = c(0,1,1),
MI = c(1,1,1),
BP = c(1,1,0))
df %>%
rowwise() %>%
mutate(
CVD = min(Stroke, MI, BP)
) %>%
ungroup()
#> # A tibble: 3 × 4
#> Stroke MI BP CVD
#> <dbl> <dbl> <dbl> <dbl>
#> 1 0 1 1 0
#> 2 1 1 1 1
#> 3 1 1 0 0
由reprex 包于 2022-07-11 创建 (v2.0.1)
尝试使用dplyr
rowwise
函数
library(dplyr)
df |> rowwise() |> mutate(CVD = if(all(c_across() == 1)) 1 else 0) |> ungroup()
# A tibble: 3 × 4
# Rowwise:
Stroke MI BP CVD
<int> <int> <int> <dbl>
1 0 1 1 0
2 1 1 1 1
3 1 1 0 0
不知道你如何安排你的变量。 如果它们是分离的向量,这应该有效:
Stroke = c(0,1,1)
MI = c(1,1,1)
BP = c(1,1,0)
CVD = as.numeric(Stroke & MI & BP)
如果是data.frame
:
df$CVD = with(df, as.numeric(Stroke & MI & BP)
或者其他人提到的解决方案。
也许是这样:
library(tidyverse)
Data <- data.frame(Stroke = c(0,1,1),
MI = c(1,1,1),
BP = c(1,1,0))
Data <- Data %>%
mutate(CVD = if_else(Stroke == 1 &MI == 1 & BP == 1, 1, 0))
base R
选项:
df$CVD <- apply(df,2, function(x) !any(0 %in% x)) + 0
df
输出:
Stroke MI BP CVD
1 0 1 1 0
2 1 1 1 1
3 1 1 0 0
在cbind
rowSums
到dat
是一个数据框并创建它。
cbind(dat, CVD=+(rowSums(dat[c('Stroke', 'MI', 'BP')]) == 3))
# Stroke MI BP CVD
# 1 0 1 1 0
# 2 1 1 1 1
# 3 1 1 0 0
如果您只有这些列,则可以简化为:
cbind(dat, CVD=+(rowSums(dat) == 3))
数据:
dat <- structure(list(Stroke = c(0L, 1L, 1L), MI = c(1L, 1L, 1L), BP = c(1L,
1L, 0L)), class = "data.frame", row.names = c(NA, -3L))
解决您的问题的另一种方法:
df$CVD = with(df, pmin(Stroke, MI, BP))
Stroke MI BP CVD
1 0 1 1 0
2 1 1 1 1
3 1 1 0 0
# or
library(data.table)
setDT(df)[, CVD := pmin(Stroke, MI, BP)]
# or
library(dplyr)
df = df %>%
mutate(CVD = pmin(Stroke, MI, BP))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.