【发布时间】:2015-05-07 23:24:56
【问题描述】:
我有一个复杂的问题,我将尝试通过简化我的数据集来简化它。假设我有 5 个变量:
df$Id <- c(1:12)
df$Date <- c(NA,NA,a,a,b,NA,NA,b,c,c,b,a)
df$va <- c(1.1, 1.4, 2.5, ...) #12 randoms values
df$vb <- c(5.9, 2.3, 4.7, ...) #12 other random values
df$vc <- c(3.0, 3.3, 3.7, ...) #12 more random values
然后我想创建一个新变量,如果日期等于 a、b 或 c,则该变量从 va、vb 或 vc 中获取值。我曾尝试过嵌套的 if-else,但它不起作用。我也试过了:
df$new[df$date=='a' & !is.na(df$date)] <- df$va
df$new[df$date=='b' & !is.na(df$date)] <- df$vb
df$new[df$date=='c' & !is.na(df$date)] <- df$vc
这正确地将 NA 留在了 Date=NA 的新变量中,但是提供的值不是来自 va、vb 或 vc,而是完全来自其他一些值。如果日期为“a”,如何使 df$new 等于 va,如果日期为“b”,则为 vb,如果日期为“c”,则为 vc?
【问题讨论】:
-
请通过 (1) 输入
a,b,c的值 (2) 不使用...等使其可重现。我们无法按原样复制粘贴您的代码来制作示例。考虑使用dput(head(df))并在此处查看:stackoverflow.com/questions/5963269/… -
列和日期是否实际命名为 va、vb、vc、a、b、c?这比实际上不匹配的名称更容易。
-
@Molx:列的名称是 FSLE20060813、FSLE20060814 等,而日期的名称是 2006-08-13、2006-08-14 等。
-
@Frank:我输入的值不是我的实际值,因为数据集在两个维度上都比我提供的要大得多。我不知道生成随机数的代码,所以我不想添加需要修复的另一行。出于可重现的目的,您可以使用随机数生成器,或执行类似 df$va
标签: r conditional conditional-statements subset