R:在数据帧单元格搜索中插入值从另一个数据帧中提取它

时间:2021-01-13 11:25:28

标签: r dataframe

我有一个如下所示的数据框:

          Date     Element         Problem   Losses
   1  2020-09-29        54     Energy loss       NA
   2  2020-09-30        54           Fault       NA
   3  2020-09-30        54     Energy loss       NA
   4  2020-09-29        40         Cooling       NA
   5  2020-09-29        50         Voltage       NA

每当 Losses 列包含子字符串“Energy”时,我想在 problem 列中插入某些值。

我需要插入的值在另一个数据框中,如下所示:

       Date    Element       Losses
1 2020-09-29        54        13.24
2 2020-09-30        54        12.16

这只是一个例子,因为我使用的实际数据框非常大,所以我想通过 DateElement 列进行某种类型的合并,而不是循环遍历两个数据帧。

编辑:

我尝试通过 Element 列使用合并,所以首先我为所有相应的元素重复获取 Losses,然后将那些行放在我没有想要的子字符串的地方回到南。

我的问题是通过 Element 合并会删除我所有的其他行,只得到以下内容:

          Date     Element         Problem   Losses
   1  2020-09-29        54     Energy loss    13.24
   2  2020-09-30        54           Fault       NA
   3  2020-09-30        54     Energy loss    12.16

1 个答案:

答案 0 :(得分:1)

基础 R 解决方案:

transform(df, Losses = insert_df$Losses[match(paste0(Date, Element, grepl("Energy", Problem)),
                                              paste0(insert_df$Date, insert_df$Element, "TRUE"))])

数据:

df <- structure(list(Date = structure(c(18534, 18535, 18535, 18534, 
18534), class = "Date"), Element = c(54L, 54L, 54L, 40L, 50L), 
Problem = c("Energy loss", "Fault", "Energy loss", "Cooling", 
"Voltage"), Losses = c(NA, NA, NA, NA, NA)), row.names = c(NA, 
-5L), class = "data.frame")

insert_df <- structure(list(Date = structure(18534:18535, class = c("IDate", 
"Date")), Element = c(54L, 54L), Losses = c(13.24, 12.16)), class = "data.frame", row.names = c(NA, 
-2L))