Как добавить новые переменные с похожими именами во фрейм данных, используя условные операторы других?

ES6 предоставляет метод Array.from() , который создает новый экземпляр Array из объекта, подобного массиву или итерации.

let boxes = document.getElementsByClassName('box');

Array.from(boxes).forEach(v => v.style.background = 'green');
console.log(Array.from(boxes));
.box {
  width: 50px;
  height: 50px;
  margin: 5px;
  background: blue;
  display: inline-block;
}

Как вы можете видеть внутри фрагмента кода, после использования функции Array.from() вы можете манипулировать каждым элементом.

Это же решение с использованием jQuery.

$('.box').css({'background':'green'});
.box {
  width: 50px;
  height: 50px;
  margin: 5px;
  background: blue;
  display: inline-block;
}

1
задан Tereza Bernardes 22 March 2019 в 19:04
поделиться

1 ответ

Если вы хотите избежать изменения ваших данных, что не всегда просто в этом формате, вы можете использовать функции _at в dplyr. Ключевая вещь, которую нужно знать о mutate_at, что, на мой взгляд, не слишком очевидно, - это то, что вы можете использовать его для создания новых столбцов с согласованным стилем именования. Таким образом, мы можем сделать:

  1. Используйте mutate_at, чтобы усечь столбцы pa, если у женщин было более 7 детей. Это в основном означает: сделать эту функцию, которая заменяет значения больше 7 на 7 в каждом столбце, который начинается с «pa». Синтаксис ~ представляет собой компактный способ описания временной функции в purrr и dplyr.

  2. Используйте mutate_at снова, но на этот раз с функцией в качестве именованного элемента списка и с функцией, которая создает функцию с правильными уровнями и метками. Имя будет добавлено к исходным именам столбцов с разделителем подчеркивания. Обратите внимание, что мы можем использовать str_c, чтобы не вводить каждый уровень вручную.

  3. Мы хотим, чтобы столбцы читали ppa вместо этого суффикса, поэтому мы можем использовать rename_at, чтобы переименовать их все. Сначала мы удалим суффикс, а затем добавим p в начало.

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

library(tidyverse)

pa2010 <- c(0, 0, 2, 5, 3, 6, 8, 2, 1, 1)
pa2009 <- c(0, 0, 2, 4, 3, 6, 8 ,2, 0, 0)
pa2008 <- c(0, 0, 1, 4, 3, 5, 8, 1, 0, 0)

Parity <- data.frame(pa2010, pa2009, pa2008)
Parity %>%
  mutate_at(
    .vars = vars(starts_with("pa")),
    .funs = ~ if_else(. >= 7, 7, .)
  ) %>%
  mutate_at(
    .vars = vars(starts_with("pa")),
    .funs = list(
      parity = ~ . %>%
        factor(levels = 0:7, labels = str_c("Parity ", 0:7)) %>%
        fct_recode("Parity 7+" = "Parity 7")
    )
  ) %>%
  rename_at(
    .vars = vars(ends_with("_parity")),
    .funs = . %>%
      str_remove("_parity") %>%
      str_c("p", .)
  )
#>    pa2010 pa2009 pa2008   ppa2010   ppa2009   ppa2008
#> 1       0      0      0  Parity 0  Parity 0  Parity 0
#> 2       0      0      0  Parity 0  Parity 0  Parity 0
#> 3       2      2      1  Parity 2  Parity 2  Parity 1
#> 4       5      4      4  Parity 5  Parity 4  Parity 4
#> 5       3      3      3  Parity 3  Parity 3  Parity 3
#> 6       6      6      5  Parity 6  Parity 6  Parity 5
#> 7       7      7      7 Parity 7+ Parity 7+ Parity 7+
#> 8       2      2      1  Parity 2  Parity 2  Parity 1
#> 9       1      0      0  Parity 1  Parity 0  Parity 0
#> 10      1      0      0  Parity 1  Parity 0  Parity 0

Создано в 2019-03-22 с помощью пакета представитель (v0.2.1)

0
ответ дан Calum You 22 March 2019 в 19:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: