Nano Hash - криптовалюты, майнинг, программирование

Создать несколько столбцов во фрейме данных на основе другого столбца

Я хотел бы обновить фрейм данных, чтобы добавить 10 столбцов со значениями, основанными на другом столбце.

Начиная с этого

df <- data.frame(ID = 1:3, name = c("Bob", "Jim", "Fred"), endValue= c(3, 7, 4))

И заканчивая этим

|ID|Name|endValue|A|B|C|D|E|F|G|H|I|J|
|1|Bob|3|Y|Y|Y|N|N|N|N|N|N|N|
|2|Jim|7|Y|Y|Y|Y|Y|Y|Y|N|N|N|
|3|Fred|4|Y|Y|Y|Y|N|N|N|N|N|N|

Итак, каждая новая запись требует:

  • оригинальное содержание
  • Десять новых столбцов
  • Условное значение, основанное на том, меньше ли endValue столбца no или равно ему.

Приветствуется любая помощь...

27.04.2021

Ответы:


1

Также используется семейство tidyverse с pmap и pivot_wider

library(dplyr)
library(purrr)
library(tidyr)

df %>%
  # map each row to a defined function using pmap
  # this function create a long table with 10 rows per ID, name, endValue
  pmap(.f = function(...) { 
    x <- tibble(...)
    y <- tibble(
      ID = x$ID, name = x$name,
      endValue = x$endValue,
      LETTER = LETTERS[1:10],
      value = c(rep("Y", x$endValue), rep("N", 10 - x$endValue)))
  }) %>%
  # combine all the df together
  bind_rows() %>%
  # then pivot_wider to get final result
  pivot_wider(names_from = LETTER, values_from = value)
#> # A tibble: 3 x 13
#>      ID name  endValue A     B     C     D     E     F     G     H     I    
#>   <int> <chr>    <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1     1 Bob          3 Y     Y     Y     N     N     N     N     N     N    
#> 2     2 Jim          7 Y     Y     Y     Y     Y     Y     Y     N     N    
#> 3     3 Fred         4 Y     Y     Y     Y     N     N     N     N     N    
#> # … with 1 more variable: J <chr>

Создана 27 апреля 2021 г. в пакете reprex (v2.0.0)

27.04.2021
  • Спасибо @Sinh 27.04.2021

  • 2

    Один из вариантов — создать столбец list, repсопоставив «Y», «N» для каждого значения столбца «endValue» с разницей от 10, а затем unnest его в ширину.

    library(dplyr)
    library(purrr)
    library(tidyr)
    df %>%
       mutate(new =  map(endValue, ~ rep(c("Y", "N"), c(.x, 10 - .x)))) %>% 
       unnest_wider(new) %>%
       rename_at(vars(starts_with('..')), ~ LETTERS[1:10])
    

    -выход

    # A tibble: 3 x 13
    #     ID name  endValue A     B     C     D     E     F     G     H     I     J    
    #  <int> <chr>    <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
    #1     1 Bob          3 Y     Y     Y     N     N     N     N     N     N     N    
    #2     2 Jim          7 Y     Y     Y     Y     Y     Y     Y     N     N     N    
    #3     3 Fred         4 Y     Y     Y     Y     N     N     N     N     N     N    
    

    Или используйте separate

    library(stringr)
    df %>%
      mutate(new = str_c(strrep('Y', endValue),
             strrep('N', 10 - endValue))) %>% 
      separate(new, into = LETTERS[1:10], sep="(?<=[A-Z])(?=[A-Z])")
    
    27.04.2021
  • Спасибо @akrun 27.04.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..