我想给
.id
的输出中的列条目
map_dfr
用单词代替索引值,但我的输入没有命名(即
how
map
accepts string values for
.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>
对于
酒吧
缩放(因此下面的regex匹配)。
事实上,我有很多音阶,每个音阶都有很多列。所以我想
地图
可能是进行计算的一种好方法,类似这样:
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公司
和
酒吧
:
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中做到这一点。无论如何,这种方法不是很好(尽管我很乐意只满足于功能)。
对于如何最好地获得我想要的输出格式,有什么建议吗?