在一个数据帧上使用Apply来填充另一个数据帧中缺少的值 [英] Use apply on a dataframe to fill in missing values from another dataframe
本文介绍了在一个数据帧上使用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_matched
到target_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屋!
查看全文