合并两个数据帧时识别行中的更改

时间:2018-07-03 19:33:59

标签: r reshape2

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为数字,则将其删除。另一种情况是默认情况下为控件。

1 个答案:

答案 0 :(得分:1)

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