相关疑难解决方法(0)

将一个数据集中的缺失值(NA)替换为列匹配的另一个数据集中的值

我有一个3列的数据框(datadf),'x','y和z.缺少几个'x'值(NA).'y'和'z'是非测量变量.

x    y z
153  a 1
163  b 1
NA   d 1
123  a 2 
145  e 2
NA   c 2 
NA   b 1
199  a 2
Run Code Online (Sandbox Code Playgroud)

我有另一个具有相同三列的数据框(imputeddf):

 x  y z
123 a 1
145 a 2
124 b 1
168 b 2
123 c 1
176 c 2
184 d 1
101 d 2
Run Code Online (Sandbox Code Playgroud)

我希望将NA'datadf'中的'x' 替换为'imputeddf'中的值,其中'y'和'z'匹配两个数据集('y'和'z'的每个组合都有自己的值'x' ' 填写).

期望的结果:

x    y z
153  a 1
163  b 1
184  d 1
123  a 2 …
Run Code Online (Sandbox Code Playgroud)

r plyr

9
推荐指数
1
解决办法
336
查看次数

左边连接(一列)的首选data.table语法

我该如何开始考虑我更喜欢哪种语法?

我的标准是效率(这是第一)以及可读性/可维护性.

这个

A <- B[A, on = .(id)] # wow such. concision
Run Code Online (Sandbox Code Playgroud)

或者那个

A[B, on = .(id), comment := i.comment]
Run Code Online (Sandbox Code Playgroud)

甚至(正如PoGibas所说):

A <- merge(A, B, all.x = TRUE)
Run Code Online (Sandbox Code Playgroud)

为了完整性,一个更基本的方法是使用match():

A[, comment := B[chmatch(A[["id"]], id), comment]]
Run Code Online (Sandbox Code Playgroud)

示例数据:

library(data.table)
A <- data.table(id = letters[1:10], amount = rnorm(10)^2)
B <- data.table(id = c("c", "d", "e"), comment = c("big", "slow", "nice"))
Run Code Online (Sandbox Code Playgroud)

r data.table

7
推荐指数
1
解决办法
655
查看次数

标签 统计

r ×2

data.table ×1

plyr ×1