使用子组内填充的值填充 NA 值
Filling NA values using the populated values within subgroups
我有以下 data.frame:
name nav_status destination
A 5 MUMBAI
A 0 NA
A 1 NA
B 5 NA
B 0 NEW YORK
B 1 NA
我打算用基于名称列的值填充 NA 值。
我试过:
使用上次观察结转技术填充 NA
值,但随后数据失真。我使用了 zoo
包和 na.locf
语法:
NEW <- na.locf(FINAL, fromLast = TRUE)
我也试过创建一个单独的文件然后使用gsub
,但它不是通用的,每次都必须创建一个单独的文件,因为我有大量数据。
预期结果:
name nav_status destination
A 5 MUMBAI
A 0 MUMBAI
A 1 MUMBAI
B 5 NEW YORK
B 0 NEW YORK
B 1 NEW YORK
使用data.table
,我们将'data.frame'转换为'data.table'(setDT(df1)
),按'name'分组,执行na.locf
使用 na.rm=FALSE
在目的地上的正向方向,然后在反向模式 (fromLast=TRUE
) 中再次执行此操作并将输出分配 (:=
) 返回到同一列。
library(zoo)
library(data.table)
setDT(df1)[, destination := na.locf(na.locf(destination,
na.rm=FALSE), fromLast=TRUE), by = name]
df1
# name nav_status destination
#1: A 5 MUMBAI
#2: A 0 MUMBAI
#3: A 1 MUMBAI
#4: B 5 NEW YORK
#5: B 0 NEW YORK
#6: B 1 NEW YORK
您可以使用 dplyr 包执行此操作:
library(dplyr)
dat %>%
group_by(name) %>%
mutate(destination = destination[which(!is.na(destination))][1])
这将使用每个名称的目标的第一个非 NA 值填充目标列。
name nav_status destination
(fctr) (dbl) (fctr)
1 A 5 MUMBAI
2 A 0 MUMBAI
3 A 1 MUMBAI
4 B 5 NEW YORK
5 B 0 NEW YORK
6 B 1 NEW YORK
我有以下 data.frame:
name nav_status destination
A 5 MUMBAI
A 0 NA
A 1 NA
B 5 NA
B 0 NEW YORK
B 1 NA
我打算用基于名称列的值填充 NA 值。 我试过:
使用上次观察结转技术填充
NA
值,但随后数据失真。我使用了zoo
包和na.locf
语法:NEW <- na.locf(FINAL, fromLast = TRUE)
我也试过创建一个单独的文件然后使用
gsub
,但它不是通用的,每次都必须创建一个单独的文件,因为我有大量数据。
预期结果:
name nav_status destination
A 5 MUMBAI
A 0 MUMBAI
A 1 MUMBAI
B 5 NEW YORK
B 0 NEW YORK
B 1 NEW YORK
使用data.table
,我们将'data.frame'转换为'data.table'(setDT(df1)
),按'name'分组,执行na.locf
使用 na.rm=FALSE
在目的地上的正向方向,然后在反向模式 (fromLast=TRUE
) 中再次执行此操作并将输出分配 (:=
) 返回到同一列。
library(zoo)
library(data.table)
setDT(df1)[, destination := na.locf(na.locf(destination,
na.rm=FALSE), fromLast=TRUE), by = name]
df1
# name nav_status destination
#1: A 5 MUMBAI
#2: A 0 MUMBAI
#3: A 1 MUMBAI
#4: B 5 NEW YORK
#5: B 0 NEW YORK
#6: B 1 NEW YORK
您可以使用 dplyr 包执行此操作:
library(dplyr)
dat %>%
group_by(name) %>%
mutate(destination = destination[which(!is.na(destination))][1])
这将使用每个名称的目标的第一个非 NA 值填充目标列。
name nav_status destination
(fctr) (dbl) (fctr)
1 A 5 MUMBAI
2 A 0 MUMBAI
3 A 1 MUMBAI
4 B 5 NEW YORK
5 B 0 NEW YORK
6 B 1 NEW YORK