合并两个数据框时识别行的变化

Identify changes in rows when merging two dataframs

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 是较新的年份。

我试图获得的结果是有一个新列 Status,以指示它是被添加、删除还是常量(控制)。我尝试使用 if then 语句。给定数据结构,如果一只股票 Price.X 是 NA 并且 Price.Y 是数字,那么它就会被添加。如果 Price.Y 是 NA 并且 Price.X 是数字,那么它会被删除。另一种情况默认是control。

可以使用 dplyrcase_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