dplyr为枢轴表熔化

时间:2017-10-16 14:45:15

标签: r dplyr reshape2 melt

如果我想在dplyr调用中应用多个函数,我可以运行以下命令:

async function logIn() {
  const { type, token } = await Expo.Facebook.logInWithReadPermissionsAsync('<APP_ID>', {
      permissions: ['public_profile'],
    });
  if (type === 'success') {
    // Get the user's name using Facebook's Graph API
    const response = await fetch(
      `https://graph.facebook.com/me?access_token=${token}`);
    Alert.alert(
      'Logged in!',
      `Hi ${(await response.json()).name}!`,
    );
  }
}

输出:

mtcars %>% group_by(gear) %>% select(hp, disp) %>%  
  summarise_all(funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T)))

这很棒,正是我想要的。现在如果我想把它融化成一个数据透视表(我们在工作中使用很多数据透视表),我可以调用# A tibble: 3 x 5 gear hp_n disp_n hp_mean disp_mean <dbl> <int> <int> <dbl> <dbl> 1 3 15 15 176.1333 326.3000 2 4 12 12 89.5000 123.0167 3 5 5 5 195.6000 202.4800 。但是,结果会使melt_mean列成为他们自己的行。所以,如果我运行以下内容:

_n

我会得到

mtcars %>% group_by(gear) %>% select(hp, disp) %>%  
  summarise_all(funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>%
  melt(id.vars="gear")

当我真正想要的是:

   gear  variable    value
1     3      hp_n  15.0000
2     4      hp_n  12.0000
3     5      hp_n   5.0000
4     3    disp_n  15.0000
5     4    disp_n  12.0000
6     5    disp_n   5.0000
7     3   hp_mean 176.1333
8     4   hp_mean  89.5000
9     5   hp_mean 195.6000
10    3 disp_mean 326.3000
11    4 disp_mean 123.0167
12    5 disp_mean 202.4800

如何使用 gear variable metric value 1 3 hp n 15.0000 2 3 hp mean 176.1333 3 5 disp n 15.0000 4 5 disp mean 326.3000 .... 执行此操作?我是否需要重新执行dplyr命令?

0 个答案:

没有答案