【问题标题】:select value from a random column in dplyr从 dplyr 中的随机列中选择值
【发布时间】:2021-10-14 09:05:30
【问题描述】:

我有一个 tibble/dataframe df 有六列 (a,b,c,d,e,f)

我随机选择这六个字母中的一个并将其分配给一个额外的列:

df %>% mutate(ran=sample(c("a","b","c","d","e","f"),n(), replace=T))

因此,对于每一行,我都有一个随机选择的列名。如何获取相应随机选取的列的值并将其放入新列?

【问题讨论】:

  • 您的意思是例如在第 1 行有 d 的 run 列中,并希望它被第 1 行中 d 列的值填充?
  • 是的,确切地说:所以无论在 'ran' 中生成什么列名,该列的值都应该在一个新列中

标签: r dataframe dplyr


【解决方案1】:

这是一个依赖 tidyr::gather 的 tidyverse 解决方案。

首先我创建一个示例 tibble。

library(tidyverse)
set.seed(123)

df <-
  tibble(a = 1:5, b = a + 10, c = b + 10, d = c + 10, e = d + 10, f = e + 10) %>%
  mutate(
    ran=sample(c("a","b","c","d","e","f"),n(), replace=T),
    row = 1:n()
  ) 

然后我旋转这个数据框,然后使用filter 选择正确的值。

df %>%
  gather(val, col, -ran, -row) %>%
  filter(ran==val) %>%
  select(row, col) %>%
  left_join(df, ., by = "row")

# A tibble: 5 x 9
      a     b     c     d     e     f ran     row   col
  <int> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <int> <dbl>
1     1    11    21    31    41    51 c         1    21
2     2    12    22    32    42    52 f         2    52
3     3    13    23    33    43    53 c         3    23
4     4    14    24    34    44    54 b         4    14
5     5    15    25    35    45    55 b         5    15

【讨论】:

    猜你喜欢
    • 2019-07-30
    • 2023-01-11
    • 2017-05-19
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多