繁体   English   中英

如何在 R 中同时根据多个现有变量的值创建新变量?

[英]How to create a new variable based on the values of a number of existing variables simultaneously in R?

我正在处理 R 中的数据集,并希望根据变量 dx1 的值创建一个新变量。 这是我的代码。

Data1$AMI <- Data1$dx1 %in% c("I21.0", "I21.1", "I21.2", "I21.3", 
                              "I21.4", "I21.9", "I21.A") 

我的问题是如何根据多个变量分配 AMI 的值,比如 dx1 到 dx25? 在这个数据集中,dx1 指初级诊断,dx2 指二次诊断,依此类推。 其中任何一个都包含特定的诊断代码((“I21.0”、“I21.1”、“I21.2”、“I21.3”、“I21.4”、“I21.9”、“I21.A ") ) 将被赋值为“1”。

如果 dx1 %in% c("I21.0", "I21.1", "I21.2") 或 dx2 %in% c("I21.0", "I21.1", "I21.2")或 dx3 %in% c("I21.0", "I21.1", "I21.2"),我们希望 AMI 列显示“1”。

我可能误解了你的问题; 这是你想做的吗?

# Load libraries
library(tidyverse)

# Create fake data
dx <- list()
for (i in 1:25){
  dx[[i]] <- c(paste("I",
                     round(rnorm(n = 50, mean = 21, sd = 5), 1),
                     sep = ""))
}

name_list <- paste("dx", 1:25, sep = "")
Data1 <- as.data.frame(dx, col.names = name_list)

# Create a variable called "AMI" to count the occurrences of values:
# "I21.0","I21.1","I21.2","I21.3","I21.4","I21.9"
Data2 <- Data1 %>% 
 mutate(AMI = rowSums(
   sapply(select(., starts_with("dx")),
          function(x) grepl(pattern = paste(c("I21.0","I21.1","I21.2","I21.3","I21.4","I21.9"),
                                            collapse = "|"), x)
   ))
 )
Data2

编辑

当列表“dx1:dx25”中的一个或多个变量具有列表“I21.0”、“I21”中的值时,如何获取新变量“AMI”以显示任何行的值“1”。 1","I21.2","I21.3","I21.4","I21.9"':

Data2 <- Data1 %>% 
 mutate(AMI = ifelse(rowSums(
   sapply(select(., starts_with("dx")),
          function(x) grepl(pattern = paste(c("I21.0","I21.1","I21.2","I21.3","I21.4","I21.9"),
                                            collapse = "|"), x)
   )) > 0, 1, 0)
 )
Data2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM