2017-06-22 85 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