1

我有一个与包相关separate()的问题。当数据框中没有 NA 时,separate() 起作用。我一直在使用这个功能。但是,今天我遇到了一个数据框中有 NA 的案例。返回错误消息。我可能很傻。但是,我想知道是否可能不是为这种数据清理而设计的。或者有什么办法可以与 NA 一起工作?非常感谢您抽出宝贵时间。separate()separate()

这是基于评论的更新示例。假设我想分隔 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
4

2 回答 2

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
于 2014-08-19T04:31:10.750 回答
3

您可以使用extra中的选项separate

这是hadley 的 github 问题页面中的一个示例

> df <- data.frame(x = c("a", "a b", "a b c", NA))
> df
      x
1     a
2   a b
3 a b c
4  <NA>
> df %>% separate(x, c("a", "b"), extra = "merge")
     a    b
1    a <NA>
2    a    b
3    a  b c
4 <NA> <NA>
> df %>% separate(x, c("a", "b"), extra = "drop")
     a    b
1    a <NA>
2    a    b
3    a    b
4 <NA> <NA>
于 2015-07-17T16:02:55.170 回答