我有一个包含两列的数据集,我想使用dplyr rowwise 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,当对于上面的行,使用完全相同的输入时,它导致&#34; a&#34;。
答案 0 :(得分:-1)
我不明白为什么你的代码不起作用,但以下似乎做了你期望的事情:
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