有没有函数可以获取 `pivot_wider` 生成的列名?

问题描述 投票:0回答:3

我将

pivot_wider
与(可能)多个
names_from
values_from
列一起使用。自动生成的列名称非常适合我的目的。

我的问题是,是否有一个独立的函数可以在给定

names_from
values_from
列以及原始 tibble 的情况下生成结果列名称的向量?

例如,如果我有

names_from=grp
,其中
grp
具有级别
foo, bar, baz
values_from=c("X", "Y")
,则生成的列名称将为
X_foo, X_bar, X_baz, Y_foo, Y_bar, Y_baz
。有没有简单的方法来获取这些名称?

r pivot tidyr
3个回答
0
投票

使用

expand.grid
进行组合,然后使用
paste
逐行

apply(expand.grid(c("X", "Y"), c("foo", "bar", "baz")), 1, paste, collapse="_")
[1] "X_foo" "Y_foo" "X_bar" "Y_bar" "X_baz" "Y_baz"

0
投票

没有独立的功能,但您可以制作一个,例如与

interaction
:

f <- function(names_from, values_from){
  suppressWarnings(levels(interaction(values_from, unique(names_from), sep = "_")))
}

df <- data.frame(
  grp = rep(c("foo", "bar", "baz"), 5), 
  X = floor(runif(15) * 100),
  Y = floor(runif(15) * 100)
)
f(df$grp, c("X", "Y"))  
#[1] "X_bar" "Y_bar" "X_baz" "Y_baz" "X_foo" "Y_foo"

0
投票

对于您的示例,您可以使用

生成它们
outer(c("X", "Y"), c("foo", "bar", "baz"), paste, sep = "_") |> 
  t() |>
  as.vector()
# [1] "X_foo" "X_bar" "X_baz" "Y_foo" "Y_bar" "Y_baz"

(当然你可以用

levels(your_data$grp)
来写出
c("foo", "bar", "baz")
部分。)

© www.soinside.com 2019 - 2024. All rights reserved.