我separate()
在提德尔包中有一个有关的问题。当数据帧中没有NA时,eparate()起作用。我已经经常使用此功能。但是,今天我有一个案例,其中数据帧中包含NA。separate()
返回错误消息。我可能很傻。但是,我不知道tidyr是否可能不是为这种数据清理而设计的。还是有什么方法separate()
可以使用NA?非常感谢您抽出宝贵的时间。
这是基于注释的更新示例。假设我要分隔y中的字符并创建新列。如果我用NA删除行,则separate()
可以工作。但是,我不想删除该行,该怎么办?
x <- c("a-1","b-2","c-3")
y <- c("d-4","e-5", NA)
z <- c("f-6", "g-7", "h-8")
foo <- data.frame(x,y,z, stringsAsFactors = F)
ana <- foo %>%
separate(y, c("part1", "part2"))
# > foo
# x y z
# 1 a-1 d-4 f-6
# 2 b-2 e-5 g-7
# 3 c-3 <NA> h-8
# > ana <- foo %>%
# + separate(y, c("part1", "part2"))
# Error: Values not split into 2 pieces at 3
一种方法是:
res <- foo %>%
mutate(y=ifelse(is.na(y), paste0(NA,"-", NA), y)) %>%
separate(y, c('part1', 'part2'))
res[res=='NA'] <- NA
res
# x part1 part2 z
#1 a-1 d 4 f-6
#2 b-2 e 5 g-7
#3 c-3 <NA> <NA> h-8
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句