提问人:TY Lim 提问时间:11/15/2023 最后编辑:user438383TY Lim 更新时间:11/15/2023 访问量:48
是否有函数可以获取“pivot_wider”生成的列名?
Is there a function to get the column names generated by `pivot_wider`?
问:
我正在使用(可能)多个和列。生成的自动生成的列名适合我的目的。pivot_wider
names_from
values_from
我的问题是,是否有独立的函数可以生成给定 and 列和原始 tibble 的结果列名向量?names_from
values_from
例如,如果我有 where has levels ,并且 ,则生成的列名将是 。有没有一种简单的方法可以只获得这些名字?names_from=grp
grp
foo, bar, baz
values_from=c("X", "Y")
X_foo, X_bar, X_baz, Y_foo, Y_bar, Y_baz
答:
0赞
Andre Wildberg
11/15/2023
#1
用于组合,然后按行使用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"
1赞
Maël
11/15/2023
#2
没有独立的函数,但您可以创建一个,例如: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"
或者用:do.call
do.call(paste, c(expand.grid(c("X", "Y"), unique(df$grp)), sep = "_"))
#[1] "X_bar" "Y_bar" "X_baz" "Y_baz" "X_foo" "Y_foo"
0赞
Gregor Thomas
11/15/2023
#3
对于您的示例,您可以使用以下命令生成它们
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")
评论