我有一个数据帧组合,包括两个变量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-12是id=69(日期是POSIXct).
在数据帧中必须有一些我不了解的长度.有人可以帮忙吗?
因为要替换的项目数不是替换长度的倍数.要替换的项目数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)
产生警告是因为您试图将所有内容分配给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)
| 归档时间: |
|
| 查看次数: |
56368 次 |
| 最近记录: |