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

Jør*_*ers 22 r dataframe

我有一个数据帧组合,包括两个变量DT和OD.

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

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

combi$DT[is.na(combi$DT) & ! is.na(combi$OD) ] <- combi$OD
Run Code Online (Sandbox Code Playgroud)

产量

id   DT           OD
67   2010-12-12   2010-12-12
68   NA           NA
69   NA           2010-12-12
70   NA           NA
Run Code Online (Sandbox Code Playgroud)

我原DT以为2010-12-12id=69(日期是POSIXct).

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

Hug*_*ugh 9

因为要替换的项目数不是替换长度的倍数.要替换的项目数is.na(combi$DT) & !is.na(combi$OD)是小于行数的行数combi(因此替换的长度).

你应该使用ifelse:

combi$DT <- ifelse(is.na(combi$DT) & !is.na(combi$OD), combi$OD, combi$DT)
Run Code Online (Sandbox Code Playgroud)

NB & !is.na(combi$OD)是多余的:如果两者都是NA,则替换将是NA.所以你可以使用

combi$DT <- ifelse(is.na(combi$DT), combi$OD, combi$DT)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。现在我完全理解为什么上述方法不起作用。Stackoverflow 和社区都很棒 (4认同)

Sot*_*tos 5

产生警告是因为您试图将所有内容分配给NA combi$OD所在的地方combi$DT。例如,如果您有100行2个变量的5个NA,那么您要告诉它用100个variable2的值替换那5个NA。因此,警告。试试这个,

combi$DT[is.na(combi$DT) & !is.na(combi$OD)] <- combi$OD[is.na(combi$DT) & !is.na(combi$OD)]
Run Code Online (Sandbox Code Playgroud)