根据行数分配新列中的数字

时间:2018-04-28 17:56:20

标签: r dplyr

我想知道如何根据是否每10行增加数量。

例如

test_table <- data.frame(row=c(rev(0:99)))

        > head(test_table,11)
   row
1   99
2   98
3   97
4   96
5   95
6   94
7   93
8   92
9   91
10  90
11  89

我想在row列中每隔10行传递一次新列。

所以我试过

library(dplyr)
 test_table%>%
   mutate(No=cumsum(n()/10==10))

使每个No列都为1。我要找的是数据中每10行变化0,1,2,3的数字。我怎么能这样做?

        row No
1    99  1
2    98  1
3    97  1
4    96  1
5    95  1
6    94  1
7    93  1
8    92  1
9    91  1
10   90  1
11   89  1

预期产出

   row No
1    99  0
2    98  0
3    97  0
4    96  0
5    95  0
6    94  0
7    93  0
8    92  0
9    91  0
10   90  0
11   89  1

3 个答案:

答案 0 :(得分:2)

您可以在row_number上进行模块划分:

test_table %>% mutate(No = (row_number() - 1) %/% 10)

#    row No
#1    99  0
#2    98  0
#3    97  0
#4    96  0
#5    95  0
#6    94  0
#7    93  0
#8    92  0
#9    91  0
#10   90  0
#11   89  1
# ...

答案 1 :(得分:1)

floor除以row_number()后,您可以尝试使用10。这将增加每第10行的No

library(dplyr)

test_table <- data.frame(row=c(rev(0:99)))

test_table%>%
  mutate(No=floor((row_number()-1)/10))

#     row No
# 1    99  0
# 2    98  0
# 3    97  0
# 4    96  0
# 5    95  0
# 6    94  0
# 7    93  0
# 8    92  0
# 9    91  0
# 10   90  0
# 11   89  1
# 12   88  1
# 13   87  1
# 14   86  1
# 15   85  1
# 16   84  1
# 17   83  1
# 18   82  1
# 19   81  1
# 20   80  2
# 21   79  2
#......so on

答案 2 :(得分:0)

这是一个基础R解决方案。

test_table$No <- (seq_len(nrow(test_table)) - 1) %/% 10

head(test_table, 15)
#    row No
# 1   99  0
# 2   98  0
# 3   97  0
# 4   96  0
# 5   95  0
# 6   94  0
# 7   93  0
# 8   92  0
# 9   91  0
# 10  90  0
# 11  89  1
# 12  88  1
# 13  87  1
# 14  86  1
# 15  85  1