2017-06-22 81 views
1

如果我有一個DF:的R - 無需拆卸NA拆分數據幀值

letter body_part 
    a  head 
    b  head 
    c  NA 
    d  NA 
    e  left_foot 

而且我想把它分成2個DFS ... One僅用body_part - 「頭」和其他的一切其他。即

名單< - 斯普利特(DF,DF $ body_part == '頭')

我可以做,沒有下降的NA行? (我知道我能做到這一點,如果我填一個字符串來港,但有沒有避免這一步驟的方法嗎?)

+1

'分裂(DF,DF $ body_part%的%「頭」)' – thelatemail

回答

5

?`%in%`

這%的%「從來沒有返回'NA'使其在 'if'條件下特別有用。

# just to show how the `==` comparison compares 
> df$s_col <- df$body_part == 'head' 

> split(df, df$body_part %in% 'head') 
$`FALSE` 
    letter body_part s_col 
3  c  <NA> NA 
4  d  <NA> NA 
5  e left_foot FALSE 

$`TRUE` 
    letter body_part s_col 
1  a  head TRUE 
2  b  head TRUE 
+0

@TimBiegeleisen - 爲什麼要添加'df $ s_col'? – thelatemail

+0

如果我閱讀正確,您的答案輸出假定有這樣一列。 –

+0

@TimBiegeleisen - 夠公平的,我忘記了我在粘貼答案之前已經運行了你的答案代碼。 :-) – thelatemail

0
> ind <- df$body_part == 'head' 
> ind[is.na(ind)] <- FALSE 
> split(df, ind) 
$`FALSE` 
# A tibble: 3 x 2 
    letter body_part 
    <chr>  <chr> 
1  c  <NA> 
2  d  <NA> 
3  e left_foot 

$`TRUE` 
# A tibble: 2 x 2 
    letter body_part 
    <chr>  <chr> 
1  a  head 
2  b  head 
+1

「*我知道我能做到這一點,如果我填一個字符串來港,但有避免一個辦法step?*「 – thelatemail