Я хочу пометить записи столбца .id
в выводе map_dfr
словами вместо значений индекса, но мой ввод не назван (то есть как map
принимает строковые значения для .id
).
Какой лучший способ сопоставить имена в поле .id
в этом случае?
Пример данных:
n <- 20
df <- data.frame(foo_1=rnorm(n), foo_2=rnorm(n), foo_3=rnorm(n),
foo_a=runif(n), t_foo=runif(n),
bar_1=rnorm(n), bar_2=rnorm(n), bar_3=rnorm(n),
bar_a=runif(n), t_bar=runif(n))
Оба foo
и bar
являютсяпсихометрические шкалы, и я хочу измерить надежность для каждой шкалы, используя psych::alpha()
.
Единственные релевантные столбцы имеют шаблон именования foo_<int>
(для foo
шкалы) или bar_<int>
для *Шкала 1022 * (отсюда и соответствие регулярному выражению ниже).
На самом деле у меня много шкал и много столбцов, составляющих каждую шкалу.Поэтому я подумал, что map
может быть хорошим способом выполнения вычислений, что-то вроде этого:
require(psych)
require(tidyverse)
categories <- c("foo", "bar")
categories %>%
map_dfr(~df %>%
select(matches(paste0("^",.x,"_?\\d"))) %>%
do(psych::alpha(., check.keys=TRUE)$total), .id="scale") %>%
select(scale, raw_alpha, std.alpha)
scale raw_alpha std.alpha
1 1 0.2275679 0.2791238
2 2 0.4141225 0.4130054
Но я хочу, чтобы scale
принял значения foo
и bar
:
scale raw_alpha std.alpha
1 foo 0.2275679 0.2791238
2 bar 0.4141225 0.4130054
В этом примере с игрушкой было бы неплохо просто вручную создать categories <- c(foo="foo", bar="bar")
, но со многими масштабами, которые требуют слишком больших усилий.
Одна мысль, которая у меня возникла, заключалась в том, чтобы автоматизировать подход foo="foo"
с помощью чего-то вроде zip
из Python, чтобы создать вектор пар ключ-значение, например, c(scale_name="scale_name",...)
, но я не знаю, как это сделать.сделать это в R. И в любом случае, этот подход не очень хорош (хотя я бы с радостью согласился на просто функциональность).
Любые предложения о том, как наилучшим образом получить выходной формат, который я ищу