根据两个条件,用另一个数据框中的值替换数据框中的NaN

ch

嗨,这是我对stackoverflow的第一篇文章。我一直在尝试解决此问题,但无法单独找出答案,也找不到其他可以回答该问题的帖子。

我需要用另一个数据框的值替换数据集中的缺失值;但是,棘手的是我需要匹配的值还有另一个与之相关的因素,但匹配的日期。

这是第一个数据框的简化版本:

> df1
 date       site       Value  
 1991-07-08 A          22.5
 1991-07-09 A          NaN
 1992-07-13 B          23.1
 1992-07-14 A          NaN
 1993-07-07 B          27.3

这是第二个数据框的简化版本:

> df2
date       site         value
1991-07-08 A          22.5
1991-07-09 A           NaN
1992-07-14 A           NaN
1991-07-08 B          10.6
1992-07-09 B            23
1992-07-14 B           NaN
1992-07-09 C          11.3
1992-07-14 C          12.4

我想做的是,当A的值缺失时,用B的值(具有相同日期)替换它,如果B的值不存在,则使用C的值(具有相同日期)。因此,结果数据框将如下所示:

> dfFIN
date       site       Value  
1991-07-08 A          22.5
1991-07-09 A            23
1992-07-13 B          23.1
1992-07-14 A          12.4
1993-07-07 B          27.3

到目前为止,这是我想出的:

dfFIN<-replace(df1[which(df1$site=="A"),],
           df1$value[which(df$value=="NaN")],
           df2$value[which(df2$site=="B" &        
           df2$date==df1$date[which(df1$value=="NaN" & df1$site=="A")])])

但是,我收到以下错误消息:

Error in [<-.data.frame(*tmp*, list, value = numeric(0)) : 
    missing values are not allowed in subscripted assignments of data frames

而且我还没有合并站点C。我不太确定该怎么做,将不胜感激。

托尼托诺夫

欢迎来到SO!首先,您的问题似乎有点不确定,因此我继续进行了一些更改。我从两个数据帧开始:

df1 <- read.table(text = "
date       site       Value  
1991-07-08 A          22.5
1991-07-09 A          NaN
1992-07-13 B          23.1
1992-07-14 A          NaN
1993-07-07 B          27.3
", head = T)
df2 <- read.table(text = "
date       site         Value
1991-07-08 A          22.5
1991-07-09 A           NaN
1992-07-14 A           NaN
1991-07-08 B          10.6
1991-07-09 B            23
1992-07-14 B           NaN
1992-07-09 C          11.3
1992-07-14 C          12.4
", head = T)

替换NaN为更传统的NA

df1$Value[is.nan(df1$Value)] <- NA
df2$Value[is.nan(df2$Value)] <- NA

合并(左连接)从长格式转换为宽格式()的数据框reshape2,以便日期成为关键:

library(reshape2)
dd1 <- dcast(df1, date ~ site)
dd2 <- dcast(df2, date ~ site)

dm <- merge(dd1, dd2, by = "date", all.x = TRUE, suffixes = c("", ".y"))

dm 看起来像这样:

        date    A    B  A.y  B.y    C
1 1991-07-08 22.5   NA 22.5 10.6   NA
2 1991-07-09   NA   NA   NA 23.0   NA
3 1992-07-13   NA 23.1   NA   NA   NA
4 1992-07-14   NA   NA   NA   NA 12.4
5 1993-07-07   NA 27.3   NA   NA   NA

现在,NA无需任何日期,即可轻松替换任何想要的内容。我使用以下规则:如果A缺少,请使用B.y,如果B.y也缺少,请使用C

dm$A <- ifelse(is.na(dm$A), 
               ifelse(is.na(dm$B.y),
                      dm$C, dm$B.y), 
               dm$A)

现在恢复原始格式:

dfFin <- na.omit(melt(dm[, c("date", "A", "B")], id = "date", variable.name = "site"))

         date site value
1  1991-07-08    A  22.5
2  1991-07-09    A  23.0
4  1992-07-14    A  12.4
8  1992-07-13    B  23.1
10 1993-07-07    B  27.3

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据条件,将数据框的某些值替换为另一个数据框中的值

来自分类Dev

如何根据特定条件用另一个数据框中的值替换数据框中的值?

来自分类Dev

用另一个数据框中的数据替换数据框中的数据

来自分类Dev

R-有条件地用另一个数据框中的值替换值

来自分类Dev

如何根据另一个数据框中的查找值替换熊猫数据框值?

来自分类Dev

根据另一个列条件用数据框中的另一个列表替换列表

来自分类Dev

根据条件从另一个数据框中复制列值

来自分类Dev

根据另一个数据框中的日期过滤数据框中的值

来自分类Dev

根据另一个数据框中的匹配ID替换数据框列值

来自分类Dev

如何根据条件用同一数据框中的另一个值替换熊猫数据框中的范围内的值

来自分类Dev

根据另一个数据框的索引和列,用NaN替换数据框单元格

来自分类Dev

使用条件使用 R 中的另一个数据框替换数据框的值

来自分类Dev

用另一个数据框(不是合并)引用的值替换/替换一个数据框中的所有值

来自分类Dev

根据另一个数据框计算数据框中的列值

来自分类Dev

用另一个数据框中的值替换一个数据框中的逗号分隔值

来自分类Dev

根据另一个数据框替换一个数据框中的列中的多个值

来自分类Dev

根据另一个数据框中的值对一个数据框进行子集

来自分类Dev

Python / Pandas-用另一个数据框中的值替换一个数据框中的元素

来自分类Dev

用另一个数据框中同名列的平均值替换一个数据框中的零值列

来自分类Dev

用R中另一个数据框的值合并和替换一个数据框的值

来自分类Dev

用另一个数据框的值替换一个数据框的列中的值

来自分类Dev

根据条件用另一个数据框的数据丰富一个数据框

来自分类Dev

Python:匹配其他列中的值后,用另一个数据框中的值替换特定列中的NaN

来自分类Dev

从一个数据框中替换另一个数据中的值

来自分类Dev

根据条件为另一个数据框的数据框列设置值

来自分类Dev

用另一个数据框的值替换一个数据框的列值

来自分类Dev

熊猫用另一个数据框的值替换一个数据框的值

来自分类Dev

用R中另一个数据框的特定值替换行中的值

来自分类Dev

Pandas:检查一个数据框的日期是否在另一个数据框的两个日期之间并替换值

Related 相关文章

  1. 1

    根据条件,将数据框的某些值替换为另一个数据框中的值

  2. 2

    如何根据特定条件用另一个数据框中的值替换数据框中的值?

  3. 3

    用另一个数据框中的数据替换数据框中的数据

  4. 4

    R-有条件地用另一个数据框中的值替换值

  5. 5

    如何根据另一个数据框中的查找值替换熊猫数据框值?

  6. 6

    根据另一个列条件用数据框中的另一个列表替换列表

  7. 7

    根据条件从另一个数据框中复制列值

  8. 8

    根据另一个数据框中的日期过滤数据框中的值

  9. 9

    根据另一个数据框中的匹配ID替换数据框列值

  10. 10

    如何根据条件用同一数据框中的另一个值替换熊猫数据框中的范围内的值

  11. 11

    根据另一个数据框的索引和列,用NaN替换数据框单元格

  12. 12

    使用条件使用 R 中的另一个数据框替换数据框的值

  13. 13

    用另一个数据框(不是合并)引用的值替换/替换一个数据框中的所有值

  14. 14

    根据另一个数据框计算数据框中的列值

  15. 15

    用另一个数据框中的值替换一个数据框中的逗号分隔值

  16. 16

    根据另一个数据框替换一个数据框中的列中的多个值

  17. 17

    根据另一个数据框中的值对一个数据框进行子集

  18. 18

    Python / Pandas-用另一个数据框中的值替换一个数据框中的元素

  19. 19

    用另一个数据框中同名列的平均值替换一个数据框中的零值列

  20. 20

    用R中另一个数据框的值合并和替换一个数据框的值

  21. 21

    用另一个数据框的值替换一个数据框的列中的值

  22. 22

    根据条件用另一个数据框的数据丰富一个数据框

  23. 23

    Python:匹配其他列中的值后,用另一个数据框中的值替换特定列中的NaN

  24. 24

    从一个数据框中替换另一个数据中的值

  25. 25

    根据条件为另一个数据框的数据框列设置值

  26. 26

    用另一个数据框的值替换一个数据框的列值

  27. 27

    熊猫用另一个数据框的值替换一个数据框的值

  28. 28

    用R中另一个数据框的特定值替换行中的值

  29. 29

    Pandas:检查一个数据框的日期是否在另一个数据框的两个日期之间并替换值

热门标签

归档