为什么我要“替换的项目数量不是替换长度的倍数”

时间:2016-08-03 08:29:21

标签: r dataframe

我有一个包含两个变量DT和OD的数据帧组合。

我在DT和OD中都有一些缺失值NA,但不需要相同的记录。

然后,如果OD没有丢失,我尝试用OD替换DT中的缺失值但是检索警告“要替换的项目数不是替换长度的倍数”。我可以看到它意味着长度不匹配,但我不明白为什么同一数据帧中的两列可以有不同的长度。更严重的是,输出并不完全正确(见下文)

combi$DT[is.na(combi$DT) & ! is.na(combi$OD) ] <- combi$OD

输出

id   DT           OD
67   2010-12-12   2010-12-12
68   NA           NA
69   NA           2010-12-12
70   NA           NA

对于DT,我希望2010-12-12id=69(日期为POSIXct)。

在数据帧中必须有一些我不了解长度的东西。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:8)

因为要替换的项目数不是替换长度的倍数。要替换的项目数是combi小于ifelse中的行数(以及替换长度)的行数。

您应该使用combi$DT <- ifelse(is.na(combi$DT) & !is.na(combi$OD), combi$OD, combi$DT)

& !is.na(combi$OD)

N.B。 NA是多余的:如果两者都是NA,则替换为combi$DT <- ifelse(is.na(combi$DT), combi$OD, combi$DT) 。所以你可以使用

mono ipy.exe script.py

答案 1 :(得分:4)

出现警告是因为您尝试将所有combi$OD分配到combi$DT为NA的地方。例如,如果您有100行2个变量和5个NA,那么您告诉它将变量1的5个NA替换为变量2的100个值。因此警告。试试这个,

combi$DT[is.na(combi$DT) & !is.na(combi$OD)] <- combi$OD[is.na(combi$DT) & !is.na(combi$OD)]