繁体   English   中英

带有自定义函数的dplyr行式mutate返回意外的NA

[英]dplyr rowwise mutate with custom function returns unexpected NA

我有一个包含两列的数据集,我想使用dplyr行向mutate和自定义函数将其合并为一列。 奇怪的是,对于匹配特定模式的第二行(而不是第一行或后续的模式),我得到NA作为返回值。 下面是一个示例:

my.func <- function(alpha, beta) {
  if(!is.na(beta) & beta) {
    return("c")
  } else if(is.na(alpha)) {
    return(as.character(NA))
  } else if (alpha == "a") {
    return("a")
  } else if (alpha == "b") {
    return("b")
  } else {
    return(as.character(NA))
  }
}

tmp <- data.frame(obs = 1:7,
                  dt = c('2016-03-15 17:35:46','2016-03-15 18:45:47','2016-03-15 19:22:17','2016-03-15 19:23:45','2016-03-15 20:21:55','2016-03-15 21:20:10','2016-03-15 22:18:34'),
                  one = c(NA,"a","a","a","b","a","b"), two = c(NA,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE))

tmp2 <- tmp %>% rowwise() %>% mutate(three = my.func(one, two))

这将在第三行第三列中产生一个NA,而对于上面的行,使用完全相同的输入时,将得出“ a”。

我不完全了解为什么您的代码无法正常工作,但是以下内容似乎可以满足您的期望:

tmp2 <- tmp %>% mutate(three = mapply(my.func, one, two))

>tmp2

  obs                  dt  one   two three
1   1 2016-03-15 17:35:46 <NA>    NA  <NA>
2   2 2016-03-15 18:45:47    a FALSE     a
3   3 2016-03-15 19:22:17    a FALSE     a
4   4 2016-03-15 19:23:45    a FALSE     a
5   5 2016-03-15 20:21:55    b FALSE     b
6   6 2016-03-15 21:20:10    a  TRUE     c
7   7 2016-03-15 22:18:34    b FALSE     b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM