0

我真的很感谢任何人帮助解决这个问题。有很多问题要问,所以任何和所有的建议都会受到赞赏!

这是@dardisco 在一个月前我提出类似问题时创建的样本集。a 和 b 代表两个不同的测试,数字 (09, 10, 11) 代表测试完成的年份。

最终,我想弄清楚

  1. 2010 年和 2011 年阳性 B 测试数/阳性 A 测试数

  2. 2010 年和 2011 年阳性 B 测试的数量/B 测试的总数

我必须先检查几件事:

  • 如果在 2009 年和 2010 年都进行了 A 测试,我将采用 2010 年的结果。B 测试也是如此
  • 我想删除任何有人在没有先进行 A 测试的情况下进行 B 测试的情况。如果是同年就OK了。不应该有这些……但我想知道如何检查。

如果有人有任何建议,我将不胜感激!如果您只想解决部分问题(无论是我最终想弄清楚的问题,还是我想首先进行的检查),那就太好了。我不确定我是否应该使用嵌套的 ifelse 语句,或者其他东西会更好......

如果您需要更多信息,请告诉我!

vals1 <- c(NA, "pos", "neg", "nr")
set.seed(1)
df1 <- data.frame(
   id = seq(1:10),
  a09 = sample(vals1,10,replace=TRUE),
  a10 = sample(vals1,10,replace=TRUE),
  a11 = sample(vals1,10,replace=TRUE),
  b10 = sample(vals1,10,replace=TRUE),
  b11 = sample(vals1,10,replace=TRUE)
    )

### modify to give at least one case meeting each of your criteria
df1[10,c(5,6)] <- NA # 2x NAs for b's
df1[1,c(2,3,4)] <- NA # 3x NAs for a's
df1[2,c(2,4,5,6)] <- NA # all NAs
4

1 回答 1

0

好的第一个问题:如果我理解正确,您只想考虑最近的 A 和 b 测试。正确的?

# a by default the 2011-a
df1$a=df1$a11
# if currently not defined set a to 2010-a
df1[ is.na(df1$a), "a"] = df1[ is.na(df1$a), "a10"] 

# b by default 2011 b
df1$b=df1$b11
# if not defined yet set b to 2010-b
df1[ is.na(df1$b), "b"] = df1[ is.na(df1$b), "b10"] #set just those a's to 10 not defined in a11

# set all b's to NA where a is NA
df1[is.na(df1$a), "b"] = NA

# number of positive a's
num.pos.a = nrow(df1[ !is.na(df1$a) & df1$a=="pos",])
# number of positive b's
num.pos.b = nrow(df1[ !is.na(df1$b) & df1$b=="pos",])

那是你想要的吗?

于 2013-07-16T19:34:47.150 回答