对每第 n 行应用不同的函数

Apply different functions to every nth row

我有一个大数据框:

age<- c(25,25,25,25,25,30,30,30,30,30)
pop<-c(1000,1000,1000,1000,1000,800,800,800,800,800)
df<-rbind(age,pop)

实际上,我在同一个数据框中对该结构进行了多次迭代(针对每个性别和年份)。 我想要做的是,将 ageclasses 更改为递增的数字 - 从每 5 个开始。排。让它像这样:

age<- c(25,26,27,28,29,30,31,32,33,34)
pop<-c(1000,1000,1000,1000,1000,800,800,800,800,800)
df_new<-rbind(age,pop)

我的想法是要申请年龄+0,年龄+1,年龄+2,年龄+3,年龄+4;到第 1、2、3、4、5 行的每个倍数。 我尝试了嵌套循环或 lapply 但对我没有任何作用。

这个有用吗:

library(dplyr)
t(df) %>% as_tibble() %>% group_by(age) %>% 
               mutate(age = age+0:(n()-1)) %>% ungroup() %>% as.matrix(df) %>% t()
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
age   25   26   27   28   29   30   31   32   33    34
pop 1000 1000 1000 1000 1000  800  800  800  800   800

我认为您的数据应该采用这种格式。

age<- c(25,25,25,25,25,30,30,30,30,30)
pop<-c(1000,1000,1000,1000,1000,800,800,800,800,800)
df<-data.frame(age,pop)

您可以使用seq函数。

library(dplyr)
df %>% mutate(age = seq(min(age), length.out = n()))

#   age  pop
#1   25 1000
#2   26 1000
#3   27 1000
#4   28 1000
#5   29 1000
#6   30  800
#7   31  800
#8   32  800
#9   33  800
#10  34  800

如果您想为每个 sexyear 变量执行此操作,您可以将它们添加到 group_by :

df %>% group_by(sex, year) %>% mutate(age = seq(min(age), length.out = n()))