合并两个数据框时识别行的变化
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。
可以使用 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
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。
可以使用 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