相关疑难解决方法(0)

将多组测量列(宽格式)整形为单列(长格式)

我有一个宽格式的数据帧,在不同的日期范围内重复测量.在我的例子中,有三个不同的时期,都有相应的值.例如,第一测量(Value1)是在测量期间从DateRange1StartDateRange1End:

ID DateRange1Start DateRange1End Value1 DateRange2Start DateRange2End Value2 DateRange3Start DateRange3End Value3
1 1/1/90 3/1/90 4.4 4/5/91 6/7/91 6.2 5/5/95 6/6/96 3.3 
Run Code Online (Sandbox Code Playgroud)

我希望将数据重新整形为长格式,以便将DateRangeXStart和DateRangeXEnd列分组.因此,原始表中的1行在新表中变为3行:

ID DateRangeStart DateRangeEnd Value
1 1/1/90 3/1/90 4.4
1 4/5/91 6/7/91 6.2
1 5/5/95 6/6/96 3.3
Run Code Online (Sandbox Code Playgroud)

我知道必须有一种方法可以用reshape2/ melt/ recast/ 来做到这一点tidyr,但我似乎无法弄清楚如何以这种特殊方式将多组度量变量映射到单个值列集.

r reshape r-faq reshape2 tidyr

36
推荐指数
5
解决办法
1万
查看次数

将多列组合成整洁的数据

我的数据集如下所示:

unique.id abx.1    start.1     stop.1 abx.2    start.2     stop.2 abx.3    start.3     stop.3 abx.4    start.4
1         1  Moxi 2014-01-01 2014-01-07  PenG 2014-01-01 2014-01-07 Vanco 2014-01-01 2014-01-07  Moxi 2014-01-01
2         2  Moxi 2014-01-01 2014-01-02 Cipro 2014-01-01 2014-01-02  PenG 2014-01-01 2014-01-02 Vanco 2014-01-01
3         3 Cipro 2014-01-01 2014-01-05 Vanco 2014-01-01 2014-01-05 Cipro 2014-01-01 2014-01-05 Vanco 2014-01-01
4         4 Vanco 2014-01-02 2014-01-03 Cipro 2014-01-02 2014-01-03 Cipro 2014-01-02 2014-01-03  PenG 2014-01-02
5         5 Vanco 2014-01-01 2014-01-02  PenG 2014-01-01 2014-01-02  PenG 2014-01-01 2014-01-02 Cipro 2014-01-01
      stop.4    intervention …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyr

5
推荐指数
2
解决办法
2204
查看次数

在R中收集多组列

我有一个广泛的数据框架,我需要收集或融入高大的数据帧.我坚持的部分是我有一组需要保持关联/分组的列.

每个表单提交有2个用户,每个用户有3列数据.我想取这6列并基本上将它们分成3组,这样每个用户都是一个单独的观察.

这是我的数据或多或少的样本:

wide <- data.frame(
    form.ID     = c(1, 2), 
    entry.date  = c("2016-07-01", "2016-06-15"), 
    user.1      = c("Joe", "Sam"), 
    user.1.ID   = c("A1", "A2"), 
    user.1.data = c("foo", "lorem"),
    user.2      = c("Jane", "Sue"), 
    user.2.ID   = c("B1", "B2"),
    user.2.data = c("bar", "ipsum")
)

wide
#   form.ID entry.date user.1 user.1.ID user.1.data user.2 user.2.ID user.2.data
# 1       1 2016-07-01    Joe        A1         foo   Jane        B1         bar
# 2       2 2016-06-15    Sam        A2       lorem    Sue        B2       ipsum
Run Code Online (Sandbox Code Playgroud)

这是期望的最终状态:

#   form.ID  entry.date   user   user.ID   user.data
# 1       1  2016-07-01 …
Run Code Online (Sandbox Code Playgroud)

r tidyr

5
推荐指数
1
解决办法
1231
查看次数

用多个钥匙收集

我知道之前已经问过这个问题,但我不太明白.

我有一个如下所示的数据集:

Precinct  Crime       2000   2001  2002  2003  
1         Murder       3      1     2     2
1         Rape         12     5     10    11
1         Burglary     252   188    297   403
2         Murder       4      2      1     0 
Run Code Online (Sandbox Code Playgroud)

以及每年列出的每项犯罪的价值.

我正在尝试将其重新排列为更简单的集合,如下所示:

Precinct    Crime    Year   Value
   1        Murder   2000     3
   1        Rape     2000     12
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我知道我应该使用tidyr gather,但推断多个键的解决方案并不适合我.

transpose r tidyr

5
推荐指数
1
解决办法
6988
查看次数

将数据行重塑为两列

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

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
Run Code Online (Sandbox Code Playgroud)

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

  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
Run Code Online (Sandbox Code Playgroud)

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

r tidyverse

4
推荐指数
1
解决办法
34
查看次数

data.table在多列上长到宽

我有一个关于data.table' meltdcast多列的问题.我在StackOverFlow上浏览过,但很多类似的帖子都不是我想要的.我将在下面解释.

首先,data是关于问题的原因和价值量.这是我的一部分data:

ID   Type    Problem1    Value1     Problem2    Value2    Problem3    Value3
1    A       X           500        Y           1000      Z           400
2    A       X           600        Z           700       
3    B       Y           700        Z           100
4    B       W           200        V           200
5    C       Z           500        V           500       
6    C       X           1000       W           100       V           900
Run Code Online (Sandbox Code Playgroud)

第二,ID是独一无二的.Type包含三个(A,B,和C).有5个问题.

ID == 1作为一个例子.这是Type A …

r data.table

3
推荐指数
1
解决办法
802
查看次数

用tidyr收集多个列

我有一个购物车数据,看起来像下面的示例数据框:

sample_df<-data.frame(
   clientid=1:10,
   ProductA=c("chair","table","plate","plate","table","chair","table","plate","chair","chair"),
   QuantityA=c(1,2,1,1,1,1,2,3,1,2),
   ProductB=c("table","doll","shoes","","door","","computer","computer","","plate"),
   QuantityB=c(3,1,2,"",2,"",1,1,"",1)
)
#sample data frame
   clientid ProductA QuantityA ProductB QuantityB
1  1        chair    1         table   3
2  2        table    2         doll    1   
3  3        plate    1         shoes   2             
4  4        plate    1             
...
10 10       chair    2         plate   1
Run Code Online (Sandbox Code Playgroud)

我想将其转换为不同的格式,如下所示:

#ideal data frame
   clientid ProductNumber Product Quantity
1  1        A             chair   1
2  1        B             table   3
3  2        A             table   2
4  2        B             doll    1
...
11 6        A             chair   1
... …
Run Code Online (Sandbox Code Playgroud)

r reshape dplyr tidyr

2
推荐指数
1
解决办法
2935
查看次数

将重复的列集合收集到单个列中

这里已经解决了收集多组列的问题:收集多组列,但在我的情况下,列不是唯一的.

我有以下数据:

input <- data.frame(
  id = 1:2, 
  question = c("a", "b"),
  points = 0,
  max_points = c(3, 5),
  question = c("c", "d"),
  points = c(0, 20),
  max_points = c(5, 20),
  check.names = F,
  stringsAsFactors = F
)
input
#>   id question points max_points question points max_points
#> 1  1        a      0          3        c      0          5
#> 2  2        b      0          5        d     20         20
Run Code Online (Sandbox Code Playgroud)

第一列是id,然后我有很多重复的列(原始数据集有133列):

  1. 问题的标识符
  2. 给出的分数
  3. 最高分

我想结束这个结构:

expected <- data.frame(
  id = c(1, …
Run Code Online (Sandbox Code Playgroud)

r reshape reshape2 data.table tidyr

2
推荐指数
1
解决办法
303
查看次数

使用 pivot_longer 将宽列收集到多个长列中

我有使用gather从宽转换为长的代码,但我必须逐列执行此操作。我想使用 pivot_longer 将宽多列收集到多个长列中,而不是逐列。

例如,列 hf_1、hf_2、hf_3、hf_4、hf_5、hf_6 需要转换为 2 列(hf_com - 此列具有来自宽 hf 列的值 1,2,3,4,5,6)和 (hf_com_freq -此列的值为 1)。

对于列 ac_1、ac_2、ac_3、ac_4、ac_5、ac_6,同样需要发生。这些列需要转换为 2 列(ac_com - 此列的值来自宽 ac 列,值为 1,2,3,4,5,6)和(ac_com_freq - 此列的值为 1)。

列 cs_1、cs_2、cs_3、cs_4、cs_5、cs_6、cs_7、cs_8 也需要发生同样的情况。这些列需要转换为 2 列(cur_sal - 此列的值来自宽 cs 列,值为 1,2,3,4,5,6,7,8)和(curr_sal_freq - 此列的值为 1)。

列 se_1、se_2、se_3、se_4、se_5、se_6、se_7、se_8 也需要发生同样的情况。这些列需要转换为 2 列(exp_sal - 此列的值是 1,2,3,4,5,6,7,8 来自宽 se 列)和(exp_sal_freq - 此列的值为 1)

我试过看:

收集多组列

和:

将多组测量列(宽格式)重塑为单列(长格式)

但我无法获得我需要的多个更长的列。

这是输入数据:

structure(list(np_id = c("81", "83", "85", "88", "1", "2"), np_look_work = c("yes", 
"yes", "yes", "yes", "yes", "yes"), np_current_work = c("no", …
Run Code Online (Sandbox Code Playgroud)

r tidyr

0
推荐指数
1
解决办法
1454
查看次数

标签 统计

r ×9

tidyr ×7

reshape ×3

data.table ×2

dplyr ×2

reshape2 ×2

r-faq ×1

tidyverse ×1

transpose ×1