使用来自 data.table 的相似 ID 的值重新编码 NA
Recode NA with values from similar ID with data.table
我正在学习使用 data.table
并尝试通过 b
将 NA 重新编码为非缺失值。
library(data.table)
dt <- data.table(a = rep(1:3, 2),
b = c(rep(1,3), rep(2, 3)),
c = c(NA, 4, NA, 6, NA, NA))
> dt
a b c
1: 1 1 NA
2: 2 1 4
3: 3 1 NA
4: 1 2 6
5: 2 2 NA
6: 3 2 NA
我想得到这个:
> dt
a b c
1: 1 1 4
2: 2 1 4
3: 3 1 4
4: 1 2 6
5: 2 2 6
6: 3 2 6
我尝试了这些,但 none 给出了我想要的结果。
dt[, c := ifelse(is.na(c), !is.na(c), c), by = b]
dt[is.na(c), c := dt[!is.na(c), .(c)], by = b]
感谢您提供一些帮助,以及关于我在尝试使用 data.table
方法解决问题时应该如何 consider/think 的一些解释。
假设一个简单的情况,其中 b
的每个级别只有一个 c
:
dt[, c := c[!is.na(c)][1], by = b]
dt
我正在学习使用 data.table
并尝试通过 b
将 NA 重新编码为非缺失值。
library(data.table)
dt <- data.table(a = rep(1:3, 2),
b = c(rep(1,3), rep(2, 3)),
c = c(NA, 4, NA, 6, NA, NA))
> dt
a b c
1: 1 1 NA
2: 2 1 4
3: 3 1 NA
4: 1 2 6
5: 2 2 NA
6: 3 2 NA
我想得到这个:
> dt
a b c
1: 1 1 4
2: 2 1 4
3: 3 1 4
4: 1 2 6
5: 2 2 6
6: 3 2 6
我尝试了这些,但 none 给出了我想要的结果。
dt[, c := ifelse(is.na(c), !is.na(c), c), by = b]
dt[is.na(c), c := dt[!is.na(c), .(c)], by = b]
感谢您提供一些帮助,以及关于我在尝试使用 data.table
方法解决问题时应该如何 consider/think 的一些解释。
假设一个简单的情况,其中 b
的每个级别只有一个 c
:
dt[, c := c[!is.na(c)][1], by = b]
dt