如何以长格式在另一列上创建具有现有值的新列?

时间:2019-09-20 22:58:56

标签: r dataframe

我有一个长格式的数据集(每个人有3行)。

我正在尝试基于其他两列的组合创建一个新变量(newvar)。在下面的示例数据中,我希望newvar等于abc的值,具体取决于列order < / p>

如果order=1,则newvar应该取a中的值。 如果为order=2,则newvar应采用b中的值。 如果为order=3,则newvar应采用c中的值。

id <- c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4)
a <- c(1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1)
b <- c(NA, NA, NA, 0, 0, 0, 1, 1, 1, 2, 2, 2)
c <- c(NA, NA, NA, 1, 1, 1, 0, 0, 0, NA, NA, NA)
order <- c(2, 1, 3, 1, 2, 3, 1, 2, 3, 3, 1, 2)

df <- data.frame(id, a, b, c, order)

df$newvar[df$order == 1] <- df$a
df$newvar[df$order == 2] <- df$b
df$newvar[df$order == 3] <- df$c

仅分配值会导致多个错误。 我还收到一条错误消息“要替换的项目数不是替换长度的倍数”

this post中提供的解决方案不起作用。

我希望newvar的值如下: correct values of newvar

0 个答案:

没有答案