将数据行重塑为两列

时间:2021-03-02 19:48:14

标签: r tidyverse

我们有学区数据,其中的列是特定于当地的信息(例如,免费和减价午餐的百分比)和相应的全州值。

dat <- tribble(
  ~state.poverty,  ~state.EL,  ~state.disability,  ~state.frpl, ~local.poverty, ~local.frpl, ~local.disability, ~local.EL,
  12.50592, 0.08342419, 0.12321831, 0.4495395, 25.23731, 0.6415712, 0.140739, 0.1469898)

dat
# A tibble: 1 x 8
  state.poverty state.EL state.disability state.frpl local.poverty local.frpl local.disability local.EL
          <dbl>    <dbl>            <dbl>      <dbl>         <dbl>      <dbl>            <dbl>    <dbl>
1          12.5   0.0834            0.123      0.450          25.2      0.642            0.141    0.147

我们想重塑它,使其看起来像这样。

  demog        state  local
  <chr>        <dbl>  <dbl>
1 poverty    12.5    25.2  
2 EL          0.0834  0.147
3 disability  0.123   0.141
4 frpl        0.450   0.642

看起来像pivot_longer应该能够处理的事情,但到目前为止我还没有取得太大的成功。有什么建议吗?

2 个答案:

答案 0 :(得分:6)

我们可以使用$query = new WC_Product_Query( array( // 'limit' => -1, // 'orderby' => 'date', // 'order' => 'DESC', 'return' => 'ids', 'meta_query' => array( array( 'key' => '_price', 'value' => array($_GET['min_price'], $_GET['max_price']), 'compare' => 'BETWEEN', 'type' => 'DECIMAL' ), // array( // 'key' => 'year', // 'value' => array($_GET['from_year'], $_GET['to_year']), // 'compare' => 'BETWEEN', // 'type' => 'NUMERIC' // ), ), ) ); $searches = $query->get_products();

pivot_longer

-输出

library(dplyr)
library(tidyr)
dat %>% 
  pivot_longer(cols = everything(), 
      names_to = c(".value", "demog"), names_sep = "\\.")

答案 1 :(得分:3)

使用 reshape 的基本 R 选项

reshape(
  dat,
  direction = "long",
  varying = 1:ncol(dat)
)

给予

# A tibble: 4 x 4
  time         state  local    id
  <chr>        <dbl>  <dbl> <int>
1 poverty    12.5    25.2       1
2 EL          0.0834  0.642     1
3 disability  0.123   0.141     1
4 frpl        0.450   0.147     1