r语言 - 添加一列,每16列重复一次



我需要添加一个列,列名"type"并且对于每16行,将行名更改为"type1, type2等。
我试了book1$ID %/% 16,但不完全正确。这是原始数据:

book1 <- structure(list(ID = 1:34, per_section = c(1L, 2L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 1L, 2L, 3L, 
4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 1L, 
2L)), class = "data.frame", row.names = c(NA, -34L))

这是我期望的输出:

output <- structure(list(ID = 1:34, Type = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L), per_section = c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
14L, 15L, 16L, 1L, 2L)), class = "data.frame", row.names = c(NA, 
-34L))

对于%/%,我们可能需要通过减去1和添加1来进行调整

book1$Type <- with(book1, (ID-1) %/% 16 + 1)

或者gl

更容易
library(dplyr)
book1 <- book1 %>%
mutate(Type = as.integer(gl(n(), 16, n())), .after = 1)

试试这个

book1$type <-ifelse(1:nrow(book1) %% 16 != 0 , 
1:nrow(book1) %% 16 , 16) 

最新更新