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

1つの方法は次のとおりです。

    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 issue ページの例です。

> 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 に答える