Определите изменения в строках при объединении двух фреймов данных - PullRequest
0 голосов
/ 03 июля 2018
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, чтобы указать, добавлен он, удален или постоянен (контроль). Я пытался использовать если тогда заявления. Учитывая структуру данных, если у акции Price.X - NA, а Price.Y - числовое значение, то оно добавляется. Если Price.Y - NA, а Price.X - числовое значение, то оно удаляется. Другой случай - контроль по умолчанию.

1 Ответ

0 голосов
/ 03 июля 2018

Можете ли вы использовать 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
...