对每第 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
如果您想为每个 sex
和 year
变量执行此操作,您可以将它们添加到 group_by
:
df %>% group_by(sex, year) %>% mutate(age = seq(min(age), length.out = n()))
我有一个大数据框:
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
如果您想为每个 sex
和 year
变量执行此操作,您可以将它们添加到 group_by
:
df %>% group_by(sex, year) %>% mutate(age = seq(min(age), length.out = n()))