【发布时间】:2019-11-15 15:13:58
【问题描述】:
我有一个看起来像这样的小标题/数据框:
hc_inpatient_sum hc_ambulant_sum hc_inpatient_mean hc_ambulant_mean
5 2 5.5 2.2
我想要的输出是:
my_names sum mean
hc_inpatient 5 5.5
hc_ambulant 2 2.2
我使用下面的代码得到了我想要的东西。然而,它似乎相当复杂。我猜想用不太复杂的代码也能得到同样的结果。
library(dplyr)
library(tidyr)
my_data <- tibble(hc_inpatient_sum = 5, hc_ambulant_sum = 2, hc_inpatient_mean = 5.5,
hc_ambulant_mean = 2.2)
res <- my_data %>%
pivot_longer(cols = everything(), names_to = "my_names", values_to = "my_values") %>%
separate(my_names, into = c("my_names", "stats"), sep = "_(?=[^_]+$)") %>%
pivot_wider(names_from = "stats", values_from = "my_values")
有没有更直接的方法可以使用 tidyr::pivot_longer 获得相同的结果?
或者我可以做这样的事情......
res2 <- pivot_longer(my_data, cols = everything(),
names_to = c(".value", "stats"),
names_pattern = "(.*)_(.*)") %>%
t()
colnames(res2) <- res2["stats",]
res2 <- as_tibble(res2[-1,], rownames = "my_names") %>%
mutate_at(vars(-my_names), as.double)
...不过这样更尴尬。
【问题讨论】: