[英]how to fill NA with 2 columns
我想將NA值填充到我的數據集中。 我不確定是否可以執行以下操作:
我有3列,我想填寫距離NA
duration distance mode
15 7 car
20 6 walk
13 NA car
20 8 car
18 NA walk
30 10 walk
對於每種模式,我想找到最接近的持續時間並輸入NA作為距離
對於模式汽車,最接近的持續時間為15,因此第一個NA為7,對於第二個NA(即步行模式),最接近的持續時間為20,因此NA為6。
這是一個data.table
解決方案:
library(data.table)
dt[is.na(distance),
distance := {dt[!is.na(distance)
][.SD,
on = .(mode),
distance[which.min(abs(duration - i.duration))],
by = .EACHI]$V1
}
]
dt
# duration distance mode
#1: 15 7 car
#2: 20 6 walk
#3: 13 7 car
#4: 20 8 car
#5: 18 6 walk
#6: 30 10 walk
#7: 35 10 walk
它:
na
值 mode
與唯一的non_NA
值進行自我聯接。 數據:
library(data.table)
DT <- fread('duration distance mode
15 7 car
20 6 walk
13 NA car
20 8 car
18 NA walk
30 10 walk
35 NA walk')
基數R中的一種方法可能是將NA
和非NA組分開。 對於NA_group
每個值,我們在相同mode
找到non_NA_group
中最接近的duration
,並返回相應的distance
。
NA_group <- subset(df, is.na(distance))
non_NA_group <- subset(df, !is.na(distance))
df$distance[is.na(df$distance)] <- mapply(function(x, y) {
temp <- subset(non_NA_group, mode == y)
temp$distance[which.min(abs(x - temp$duration))]
} ,NA_group$duration, NA_group$mode)
df
# duration distance mode
#1 15 7 car
#2 20 6 walk
#3 13 7 car
#4 20 8 car
#5 18 6 walk
#6 30 10 walk
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.