大家好,提前感谢您的回复。
默认情况下,R中的tidyr::pivot_wider()创建新的列名,后缀中的值来自“names_from”。这可以通过包含“names_glue = {var 1}_{var 2}"-参数来更改(如这里所示:R: Changing column names in pivot_wider() -- suffix to prefix)。然而,由于我试图在函数中使用pivot_wider,我无法弄清楚如何将此参数应用于curly-curly-variable(参见下面的示例)。
我需要以这种方式重命名列,以便稍后可以按顺序重新排序列,以便首先显示甲方的绝对数字和百分比列,然后显示乙方的绝对数字和百分比列,等等(而不是首先显示所有绝对数字,然后再显示所有百分比)。
范例:我有一个政治候选人的数据集,他们的政党联盟和他们的社会人口信息。总体和每个政党有多少男性/女性(绝对和相对)?
# Create example data frame:
Datensatz <- data.frame(Kandidat= c("Candidate A", "Candidate B", "Candidate C", "Candidate D"),
Partei = c("Party A", "Party B", "Party A", "Party C"),
Geschlecht = c("Male", "Female", "Female", "Female"))
Datensatz
# My current function code:
stats_sociodem <- function(data, var, parties){
# Create tables for statistics overall
sv_stats_all <- data %>%
group_by({{var}}) %>%
summarise(all_n = n()) %>%
mutate(all_per = prop.table(all_n) * 100)
# Create table for statistics grouped by parties
sv_stats <- data %>%
group_by({{var}}, {{parties}}) %>%
summarise(n = n()) %>%
group_by({{parties}}) %>%
mutate(per = prop.table(n) * 100) %>%
pivot_wider(names_from = {{parties}},
values_from = c("n", "per"),
names_glue = "{{{parties}}}_{.value}"
) %>%
select({{var}}, sort(names(.)))
# Join
var_name <- deparse(substitute(var))
sv_stats_final <- left_join(sv_stats, sv_stats_all, by=var_name)
sv_stats_final
}
# Application example for gender statistics:
stats_sociodem(Datensatz, Geschlecht, Partei)
字符串
也许我可以使用正则表达式,但不确定。
1条答案
按热度按时间bqjvbblv1#
当你在下面使用
deparse(substitute())
时,你已经暗示了一个解决方案。字符串