structure(list(Name = structure(c(1L, 3L, 2L), .Label = c("AAPL",
"GOOG", "IBM"), class = "factor"), Price.X = c(150L, 139L, NA
), Price.Y = c(NA, 120L, 1200L)), class = "data.frame", row.names = c(NA,
-3L))
structure(list(Name = structure(c(1L, 3L, 2L), .Label = c("AAPL",
"GOOG", "IBM"), class = "factor"), Price.X = c(150L, 139L, NA
), Price.Y = c(NA, 120L, 1200L), Status = structure(3:1, .Label = c("Added",
"Control", "Removed"), class = "factor")), class = "data.frame", row.names =
c(NA,
-3L))
以上是我拥有的数据库的简短示例。我试图跟踪年份之间列表中的变化,所以我合并了两年,获得了Price.X和Price.Y,其中Price.Y是较新的一年。
我想要得到的结果是有一个新列,状态,以指示是否添加,删除或常量(控件)。我尝试使用if语句。在给定数据结构的情况下,如果股票的价格为Price.X为NA,价格为Price.Y为数字,则将其相加。如果Price.Y为NA,而Price.X为数字,则将其删除。另一种情况是默认情况下为控件。
答案 0 :(得分:1)
您可以使用dplyr
和case_when
吗?
您可以根据需要修改每个方案。最后的TRUE
是这里的全部内容。
library(dplyr)
df1 %>%
mutate(Status = case_when(
is.na(Price.Y) ~ "Removed",
is.na(Price.X) ~ "Added",
TRUE ~ "Control"
))
Name Price.X Price.Y Status
1 AAPL 150 NA Removed
2 IBM 139 120 Control
3 GOOG NA 1200 Added