在一个数据帧上使用Apply来填充另一个数据帧中缺少的值 [英] Use apply on a dataframe to fill in missing values from another dataframe

查看:8
本文介绍了在一个数据帧上使用Apply来填充另一个数据帧中缺少的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我想说我对R是个新手。这个问题令人沮丧,简直令人难以置信。我试过申请、申请和申请。所有这些都有错误。我迷路了。

我要做的是,如果记录没有时间(其中为NA),则从"结果"中提取时间,并将其放入"记录"中的时间中。

我已经在传统的for循环中做到了这一点,但它使代码难以阅读。我已经阅读了应用函数可以让这变得更容易。

Data Frame "Results"
ID Time(sec)    
1  1.7169811
2  1.9999999
3  2.3555445
4  3.4444444

Data Frame "Records"
ID Time(sec) Date
1  NA        1/1/2018
2  1.9999999 1/1/2018
3  NA        1/1/2018
4  3.1111111 1/1/2018

Data Frame 'New' Records
ID Time(sec)   Date
1  1.7169811 1/1/2018
2  1.9999999 1/1/2018
3  2.3555445 1/1/2018
4  3.1111111 1/1/2018

推荐答案

在这种情况下不需要使用Apply。基于某个谓词有条件地在两个值之间进行选择的模式是ifelse()

ifelse(predicate, value_a, value_b)

在本例中,您说还必须确保两个数据帧之间的值按ID匹配。在R中实现这一点的函数被适当地命名为match()

match(target_values, values_to_be_matched)

match返回匹配values_to_be_matchedtarget_values的索引,如下使用:target_values[indices]

组合在一起:

inds <- match(records$ID, results$ID)
records$time <- ifelse(is.na(records$time), results$time[inds], records$time)

is.na()这里是一个谓词,用于检查向量中每个值的值是否为NA。

这篇关于在一个数据帧上使用Apply来填充另一个数据帧中缺少的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆