dplyr join定义NA值

我可以在dplyr join中为NA定义一个“填充”值吗?例如,在连接中定义所有NA值都应为1?

require(dplyr)
lookup <- data.frame(cbind(c("USD","MYR"),c(0.9,1.1)))
names(lookup) <- c("rate","value")
fx <- data.frame(c("USD","MYR","USD","MYR","XXX","YYY"))
names(fx)[1] <- "rate"
left_join(x=fx,y=lookup,by=c("rate"))

上面的代码将为值“ XXX”和“ YYY”创建NA。就我而言,我要加入大量列,并且会有很多不匹配项。所有不匹配项应具有相同的值。我知道我可以分几个步骤进行操作,但问题是可以一次完成所有操作吗?谢谢!

塔拉特

首先,我建议您不要使用组合data.frame(cbind(...))原因如下:如果仅将原子向量传递给它,则默认情况下cbind会创建一个matrixR中的矩阵只能具有一种类型的数据(将矩阵视为具有维度属性的矢量,即行数和列数)。因此,您的代码

cbind(c("USD","MYR"),c(0.9,1.1))

创建一个字符矩阵:

str(cbind(c("USD","MYR"),c(0.9,1.1)))
# chr [1:2, 1:2] "USD" "MYR" "0.9" "1.1"

尽管您可能希望最终的数据帧具有一个字符或因子列(比率)和一个数字列(值)。但是您得到的是:

str(data.frame(cbind(c("USD","MYR"),c(0.9,1.1))))
#'data.frame':  2 obs. of  2 variables:
# $ X1: Factor w/ 2 levels "MYR","USD": 2 1
# $ X2: Factor w/ 2 levels "0.9","1.1": 1 2

因为data.frame默认情况下使用时字符串(字符)会转换为因数(您可以通过stringsAsFactors = FALSEdata.frame()调用中指定来避免这种情况)。

我建议使用以下替代方法来创建示例数据(还要注意,您可以在同一调用中轻松指定列名称):

lookup <- data.frame(rate = c("USD","MYR"), 
                     value = c(0.9,1.1))

fx <- data.frame(rate = c("USD","MYR","USD","MYR","XXX","YYY"))

现在,对于您的实际问题,如果我理解正确,您想在联接数据中将所有替换NA1如果是正确的话,这是使用left_join的自定义函数mutate_each

library(dplyr)
left_join_NA <- function(x, y, ...) {
  left_join(x = x, y = y, by = ...) %>% 
    mutate_each(funs(replace(., which(is.na(.)), 1)))
}

现在,您可以将其应用于数据,如下所示:

> left_join_NA(x = fx, y = lookup, by = "rate")
#  rate value
#1  USD   0.9
#2  MYR   1.1
#3  USD   0.9
#4  MYR   1.1
#5  XXX   1.0
#6  YYY   1.0
#Warning message:
#joining factors with different levels, coercing to character vector 

请注意,最后得到一个字符列(比率)和一个数字列(值),并且所有NA都替换为1。

str(left_join_NA(x = fx, y = lookup, by = "rate"))
#'data.frame':  6 obs. of  2 variables:
# $ rate : chr  "USD" "MYR" "USD" "MYR" ...
# $ value: num  0.9 1.1 0.9 1.1 1 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

dplyr值摘要返回NA

来自分类Dev

使用dplyr :: filter()删除NA观察值

来自分类Dev

dplyr 中的 Sum() 和聚合:NA 值

来自分类Dev

使用 dplyr 过滤时忽略 NA 值

来自分类Dev

跨行 dplyr 的聚合值

来自分类Dev

dplyr inner_join在字符列上具有NA

来自分类Dev

提取数据帧中dplyr函数中列的定义范围内值不为NA的每一列的列名

来自分类Dev

R:* _ join的标准评估(dplyr)

来自分类Dev

取代dplyr链中的NA

来自分类Dev

R:用dplyr以小时为单位替换NA值

来自分类Dev

使用dplyr将某些值设置为NA

来自分类Dev

首先和最后使用dplyr,但忽略NA值

来自分类Dev

使用dplyr将多个值设置为NA

来自分类Dev

dplyr mutate()从数据帧匹配时显示NA值

来自分类Dev

如何使用dplyr计算总的非na值?

来自分类Dev

dplyr汇总用户定义函数的多个输入值

来自分类Dev

使用dplyr获取列的值

来自分类常见问题

带条件值的dplyr变异

来自分类Dev

使用dplyr返回匹配的值

来自分类Dev

dplyr left_join小于,大于条件

来自分类Dev

dplyr left_join()按行名

来自分类Dev

用dplyr的left_join编写函数

来自分类Dev

覆盖left_join dplyr以更新数据

来自分类Dev

left_join (dplyr) 使用函数

来自分类Dev

dplyr left_join 函数不完全加入,看似随机的 NA

来自分类Dev

使用dplyr汇总时忽略NA

来自分类Dev

忽略dplyr行总和中的NA

来自分类Dev

在dplyr中基于NA进行过滤

来自分类Dev

dplyr:从group_by变量中删除NA