首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将数字序列添加到数据中

将数字序列添加到数据中
EN

Stack Overflow用户
提问于 2018-05-31 06:08:25
回答 2查看 89关注 0票数 0

嗨,我有一个像这样的数据框

代码语言:javascript
复制
df <-data.frame(x=rep(rep(seq(0,3),each=2),2 ),gr=gl(2,8))

     x gr
1    0  1
2    0  1
3    1  1
4    1  1
5    2  1
6    2  1
7    3  1
8    3  1
9    0  2
10   0  2
11   1  2
12   1  2
13   2  2
14   2  2
15   3  2
16   3  2

x值为==0时,我想添加一个新的列numbering数字序列

我试过了

代码语言:javascript
复制
library(dplyr)
df%>%
  group_by(gr)%>%
  mutate(numbering=seq(2,8,2))

Error in mutate_impl(.data, dots) : 
  Column `numbering` must be length 8 (the group size) or one, not 4

顺便说一下,mutate(numbering=rep(seq(2,8,2),each=2))适用于这个最小的示例,但对于一般情况,最好查看x值从0开始的变化!

预期输出

代码语言:javascript
复制
     x gr  numbering
1    0  1   2
2    0  1   2
3    1  1   4
4    1  1   4 
5    2  1   6
6    2  1   6
7    3  1   8
8    3  1   8
9    0  2   2
10   0  2   2
11   1  2   4
12   1  2   4
13   2  2   6
14   2  2   6
15   3  2   8
16   3  2   8
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 06:24:16

你是说像这样的东西吗?

代码语言:javascript
复制
library(tidyverse);
df %>%
    group_by(gr) %>%
    mutate(numbering = cumsum(c(1, diff(x) != 0)))
## A tibble: 16 x 3
## Groups:   gr [2]
#       x gr   numbering
#   <int> <fct>    <dbl>
# 1     0 1           1.
# 2     0 1           1.
# 3     1 1           2.
# 4     1 1           2.
# 5     2 1           3.
# 6     2 1           3.
# 7     3 1           4.
# 8     3 1           4.
# 9     0 2           1.
#10     0 2           1.
#11     1 2           2.
#12     1 2           2.
#13     2 2           3.
#14     2 2           3.
#15     3 2           4.
#16     3 2           4.

或者,如果您必须使用numbering sequence 2,4,6,...而不是1,2,3,...,您可以这样做

代码语言:javascript
复制
df %>%
    group_by(gr) %>%
    mutate(numering = 2 * cumsum(c(1, diff(x) != 0)));
## A tibble: 16 x 3
## Groups:   gr [2]
#       x gr    numering
#   <int> <fct>    <dbl>
# 1     0 1           2.
# 2     0 1           2.
# 3     1 1           4.
# 4     1 1           4.
# 5     2 1           6.
# 6     2 1           6.
# 7     3 1           8.
# 8     3 1           8.
# 9     0 2           2.
#10     0 2           2.
#11     1 2           4.
#12     1 2           4.
#13     2 2           6.
#14     2 2           6.
#15     3 2           8.
#16     3 2           8.
票数 2
EN

Stack Overflow用户

发布于 2018-05-31 13:23:17

下面是一个选项,使用match获取索引,然后传递要填充的seq

代码语言:javascript
复制
df %>% 
   group_by(gr) %>%
   mutate(numbering = seq(2, length.out = n()/2, by = 2)[match(x, unique(x))])
# A tibble: 16 x 3
# Groups:   gr [2]
#       x gr    numbering
#   <int> <fct>     <dbl>
# 1     0 1             2
# 2     0 1             2
# 3     1 1             4
# 4     1 1             4
# 5     2 1             6
# 6     2 1             6
# 7     3 1             8
# 8     3 1             8
# 9     0 2             2
#10     0 2             2
#11     1 2             4
#12     1 2             4
#13     2 2             6
#14     2 2             6
#15     3 2             8
#16     3 2             8
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50613998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档