首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NA分隔tidyr中的()

用NA分隔tidyr中的()
EN

Stack Overflow用户
提问于 2014-08-19 10:47:23
回答 2查看 14.7K关注 0票数 1

我在tidyr包中有一个与separate()相关的问题。当数据帧中没有NA时,separate()起作用。我经常使用这个函数。但是,今天我遇到了一个在数据帧中有NAs的情况。separate()返回错误消息。我可能会很傻。但是,我想知道tidyr是否不是为这种数据清理而设计的。或者,有没有什么方法可以让separate()与NAs协同工作?非常感谢您能抽出时间来。

这是一个基于评论的更新示例。假设我想分隔y中的字符并创建新列。如果我用NA删除行,separate()就可以工作了。但是,我不想删除行,我该怎么办?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-19 12:31:11

一种方法是:

代码语言:javascript
复制
    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
票数 3
EN

Stack Overflow用户

发布于 2015-07-18 00:02:55

您可以在separate中使用extra选项。

这里有一个来自hadley's github issue page的例子

代码语言:javascript
复制
> 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>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25374969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档