如何使用dplyr突变多个变量? [英] How can I mutate multiple variables using dplyr?
本文介绍了如何使用dplyr突变多个变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出一个包含多个变量(即Var.50,Var.100,Var.150和Var.200)的 tbl_df
对象 df
,并对其进行两次测量(即P1和P2),我想通过重复的测量对新的一组相同变量进行 mutate
(例如,平均值P1和P2,为每个对应的变量创建P3).
Given a tbl_df
object df
containing multiple variables (i.e. Var.50, Var.100, Var.150 and Var.200), measured twice (i.e. P1 and P2), I want to mutate
a new set of the same variables from repeated measurements (for example, average P1 and P2, creating P3 for each corresponding variable).
类似的问题,但似乎没有使用 dplyr 的清晰答案代码>.
Similar questions have been asked before, but there does not seem to have clear answers using dplyr
.
示例数据:
df <- structure(list(P1.Var.50 = c(134.242050170898, 52.375, 177.126017252604
), P1.Var.100 = c(395.202219645182, 161.636606852214, 538.408426920573
), P1.Var.150 = c(544.40028889974, 266.439168294271, 718.998555501302
), P1.Var.200 = c(620.076151529948, 333.218780517578, 837.109700520833
), P2.Var.50 = c(106.133892059326, 113.252154032389, 172.384114583333
), P2.Var.100 = c(355.226725260417, 277.197153727214, 502.086781819661
), P2.Var.150 = c(481.993103027344, 329.575764973958, 709.315409342448
), P2.Var.200 = c(541.859161376953, 372.05473836263, 829.299621582031
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-3L), .Names = c("P1.Var.50", "P1.Var.100", "P1.Var.150", "P1.Var.200",
"P2.Var.50", "P2.Var.100", "P2.Var.150", "P2.Var.200"))
推荐答案
以下是 gather
方法
library(tidyverse)
rownames_to_column(df, 'rn') %>%
gather( key, value, -rn) %>%
separate(key, into = c('key1', 'key2'), extra = 'merge', remove = FALSE) %>%
group_by(rn, key2) %>%
summarise(key3 = 'P3', value = mean(value)) %>%
unite(key, key3, key2) %>%
spread(key, value) %>%
ungroup() %>%
select(-rn) %>%
select(order(as.numeric(sub(".*\\.(\\d+)$", "\\1", names(.))))) %>%
bind_cols(df, .)
# A tibble: 3 x 12
# P1.Var.50 P1.Var.100 P1.Var.150 P1.Var.200 P2.Var.50 P2.Var.100 P2.Var.150 P2.Var.200 P3_Var.50 P3_Var.100 P3_Var.150 P3_Var.200
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 134.2421 395.2022 544.4003 620.0762 106.1339 355.2267 481.9931 541.8592 120.18797 375.2145 513.1967 580.9677
#2 52.3750 161.6366 266.4392 333.2188 113.2522 277.1972 329.5758 372.0547 82.81358 219.4169 298.0075 352.6368
#3 177.1260 538.4084 718.9986 837.1097 172.3841 502.0868 709.3154 829.2996 174.75507 520.2476 714.1570 833.2047
这篇关于如何使用dplyr突变多个变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文