我有一个data.frame
,其中包含var1
和var2
两个变量的均值和标准误差。
此data.frame
,original_df
来自为两组中的每一组的数据创建这些统计信息:
original_df <- data.frame(group_dummy_code = c(0, 1),
var1_mean = c(1.5, 2.5),
var1_se = c(.025, .05),
var2_mean = c(3.5, 4.5),
var2_se = c(.075, .1))
> original_df
group_dummy_code var1_mean var1_se var2_mean var2_se
1 0 1.5 0.025 3.5 0.075
2 1 2.5 0.050 4.5 0.100
我尝试使用tidyr
函数gather()
将data.frame
更改为desired_df
,以便绘制两个变量&#39;手段和标准错误:
desired_df <- data.frame(group_dummy_code = c(0, 1, 0, 1),
key = c("var1", "var1", "var2", "var2"),
val_mean = c(1.5, 2.5, 3.5, 4.5),
val_se = c(.025, .05, .075, .1))
> desired_df
group_dummy_code key val_mean val_se
1 0 var1 1.5 0.025
2 1 var1 2.5 0.050
3 0 var2 3.5 0.075
4 1 var2 4.5 0.100
我尝试gather()
两次以下内容:
df %>%
gather(mean_key, mean_val, -group_dummy_code, -contains("se")) %>%
gather(se_key, se_val, -group_dummy_code, -mean_key, -mean_val)
但是,这导致行太多(特别是每个均值有多个标准错误):
group_dummy_code mean_key mean_val se_key se_val
1 0 var1_mean 1.5 var1_se 0.025
2 1 var1_mean 2.5 var1_se 0.050
3 0 var2_mean 3.5 var1_se 0.025
4 1 var2_mean 4.5 var1_se 0.050
5 0 var1_mean 1.5 var2_se 0.075
6 1 var1_mean 2.5 var2_se 0.100
7 0 var2_mean 3.5 var2_se 0.075
8 1 var2_mean 4.5 var2_se 0.100
这似乎是一个相当常见的处理步骤,特别是在创建了许多变量的均值和标准差的统计数据之后,但gather()
两次 - 一次为均值,一次为标准误差变量 - -doesn似乎是一个很好的方法。
使用tidyr
(或dplyr
或其他套餐),如何从desired_df
创建original_df
?
答案 0 :(得分:1)
tidyr::gather()
不提供重塑具有多值列的数据框的功能,如果您想坚持tidyr
,则可以使用gather-separate-spread
执行此操作:
library(tidyr)
original_df %>%
gather(var_stats, value, -group_dummy_code) %>%
separate(var_stats, into = c("var", "stats")) %>%
spread(stats, value)
# group_dummy_code var mean se
#1 0 var1 1.5 0.025
#2 0 var2 3.5 0.075
#3 1 var1 2.5 0.050
#4 1 var2 4.5 0.100