【问题标题】:Randomly select a value from a row that is not NA from a data frame in R从R中的数据框中随机选择一个不是NA的行
【发布时间】:2020-09-20 23:46:03
【问题描述】:

我有一个数据框,其中包含一系列值,其中一些是 NA - 我想随机抽取一个不是 NA 的值

以下示例:

df1

col1    col2   col3
  1       4      NA
  2       NA      1
  NA       4      7

我想要一个向量,它是从每一行中选择一个非 NA 值的结果。

【问题讨论】:

    标签: r dataframe random


    【解决方案1】:

    您可以使用apply 并从每一行中随机选择一个非NA 值。

    apply(df1, 1, function(x) sample(na.omit(x), 1))
    #[1] 1 2 4
    

    【讨论】:

    • map_dbl 按列工作,每列返回 1 个随机值。我们可以使用pmap_dbl 进行逐行操作。 purrr::pmap_dbl(df1, ~sample(na.omit(c(...)), 1))
    • 啊,哎呀 - 不错。感谢罗纳克的更新!
    【解决方案2】:

    我们可以使用c_acrossrowwise 来自tidyverse

    library(dplyr)
    df1 %>%
       rowwise %>%
       mutate(Sampled = sample(na.omit(c_across(everything())), 1))
    # A tibble: 3 x 4
    # Rowwise: 
    #   col1  col2  col3 Sampled
    #  <int> <int> <int>   <int>
    #1     1     4    NA       1
    #2     2    NA     1       2
    #3    NA     4     7       7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多