【问题标题】:R - split data frame without removing NA valuesR - 在不删除 NA 值的情况下拆分数据帧
【发布时间】:2017-06-22 23:04:35
【问题描述】:

如果我有 df:

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

我想把它分成 2 个 dfs……一个只有 body_part - “head”,另一个是其他的。即

list

我可以在不删除 NA 行的情况下这样做吗? (我知道如果我用字符串填充 NA 可以做到这一点,但有没有办法避免这一步?)

【问题讨论】:

  • split(df, df$body_part %in% 'head')

标签: r dataframe split na


【解决方案1】:

来自?`%in%`

“%in%”从不返回“NA”,这使得它在 “如果”条件。

# 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

【讨论】:

  • @TimBiegeleisen - 为什么要添加 df$s_col
  • 如果我没看错的话,您的答案输出假定存在这样的列。
  • @TimBiegeleisen - 很公平,我忘了在粘贴答案之前我已经运行了你的答案代码。 :-)
  • 是的,这很棒!
【解决方案2】:
> 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

【讨论】:

  • "我知道如果我用字符串填充 NA 就可以做到,但有没有办法避免这一步?"
【解决方案3】:

您可以将split()f 参数转换为因子,同时不排除NA 值。

df <- read.table(h= T, strin = F, text = "
letter    body_part
    a     head
    b     head
    c     NA
    d     NA
    e     left_foot")

split(df, factor(df$body_part,exclude = NULL))
#> $head
#>   letter body_part
#> 1      a      head
#> 2      b      head
#> 
#> $left_foot
#>   letter body_part
#> 5      e left_foot
#> 
#> $<NA>
#>   letter body_part
#> 3      c      <NA>
#> 4      d      <NA>
split(df, factor(df$body_part,exclude = NULL) == 'head')
#> $`FALSE`
#>   letter body_part
#> 3      c      <NA>
#> 4      d      <NA>
#> 5      e left_foot
#> 
#> $`TRUE`
#>   letter body_part
#> 1      a      head
#> 2      b      head

reprex package (v0.3.0) 于 2019 年 10 月 14 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2018-07-11
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多