r - 全国住院样本的 if 和 for 声明
问题描述
我有一个数据集,附上。它有 16 列。
第一列显示患者是否进行了手术,其他15个是手术的第1-15天(编码为1、0)。
我想创建一个满足一些条件的新列。我希望该列显示程序的确切日期。
例如,如果列Day3
的值为 1,我希望新列中的新值为 3(当且仅当第一列crani
和PRDAY3
列的值为 1 时),依此类推以应用于所有天' 列(第 1-15 天)。
非常感谢您的帮助。如果您对数据集或我要解决的问题有任何疑问,请告诉我。
tts <- function(timedc){
for (i in 15) {
if (TBI$PRDAYi == "1"){
timedc = c(timedc, TBI$PRDAYi)
}
return(timedc)
}
for (i in TBI$crani){
if (TBI$crani == "1"){
tts
}
}
}
*当 tts 是时候进行手术了。
我收到此错误消息:
if (TBI$crani == "1") { 中
的警告:条件长度 > 1 并且仅使用第一个元素
我想创建一个列,该列具有来自该数据库的过程的确切日期,如上所述。
下面的数据集。
> dput(TBI[1:10, 1:6])
structure(list(TBI.crani = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), TBI.PRDAY1 = c(NA,
0, NA, NA, 1, NA, 0, 0, 0, 1), TBI.PRDAY2 = c(NA, 2, NA, NA,
11, NA, NA, 0, 16, 2), TBI.PRDAY3 = c(NA, 2, NA, NA, 0, NA, NA,
0, 0, 2), TBI.PRDAY4 = c(NA, NA, NA, NA, 9, NA, NA, NA, 0, 5),
TBI.PRDAY5 = c(NA, NA, NA, NA, 11, NA, NA, NA, 0, 1)), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"))
解决方案
我相信以下功能可以满足问题的要求。对于发布的数据,它返回一个零向量,因为第一列TBI.crani
始终为零。
tts <- function(data){
f <- function(x){
if(all(is.na(x)))
NA_integer_
else {
w <- which(x == 1)
if(length(w)) w[1] else 0L
}
}
crani <- grep("crani", names(data))
day_cols <- grep("DAY", names(data))
apply(data, 1, function(x){
if(x[crani] == 1) f(x[day_cols]) else 0L
})
}
tts(TBI)
TBI$NEW <- tts(TBI)
推荐阅读
- azure - 错误:错误:无法将 Web 包部署到应用服务。错误请求(代码:400)
- javascript - 当测验答案正确或不正确时,将类添加到 DIV 元素
- r - R函数将所有二进制值为0的行转换为NA,用于一组多列
- swift - 功能总是黑色,为什么?
- pandas - 将apply()函数应用于熊猫中的多个列?
- c++ - 构建分析:CMake/ninja 可以为每个编译单元生成编译时间日志吗?
- ios - iOS Admob 打开应用程序广告问题,下方有黑色背景
- flutter - 尽管设置为颤动,但图像未显示
- git - 全局 .gitconfig 文件可以嵌套多层吗?
- graphviz - 标签点语言Graphviz之间的布局问题