如何将一系列列划分为一列

问题描述 投票:0回答:1

我有一个包含超过 5e5 个人的数据集,如下:

library(tidyverse)
sample <- tibble( 
  iD=c(1,2),
  age=c(38,40), born_1=c(14,1),born_2=c(9,NA), born_3=c(4,NA),  born_4=c(0,NA), asfr15=c( 0.0000), asfr16=c( 
    7.40444, 7.40444),  
  asfr17=c( 42.87749, 7.40444),  asfr18=c(73.05321, 7.40444),asfr19=c(98.28869, 7.40444),asfr20=c( 144.9568, 7.40444),asfr21= c
    (164.976,180.280),asfr22=c(180.280,180.280),asfr23=c(191.304,180.280),asfr24=c(200.199,180.280),asfr25=c(200.2018,180.280),
  asfr26=c(200.2007,180.280),asfr27=c( 200.3920,180.280),asfr28=c(197.6840,180.280),asfr29=c( 193.7632,180.280),
  asfr30=c(187.6072,180.280),asfr31=c(179.5616,180.280),asfr32=c( 170.5096,180.280),asfr33=c( 160.8376,180.280),asfr34=c( 
    150.4840,180.280),asfr35=c( 139.3304,180.280),asfr36=c( 127.7960,180.280),asfr37=c( 115.0280,180.280),asfr38=c( 100.7200,180.280),
  asfr39=c(85.6256,180.280),asfr40=c( 182.4384,180.280),asfr41=c( 178.412,180.280),asfr42=c( 171.928,180.280), asfr43=c( 
    163.316,180.280),asfr44=c( 152.9056,180.280),asfr45=c( 141.0264,180.280),asfr46=c( 128.008,180.280),asfr47=c( 114.180,180.280),asfr48=c( 
      99.872,180.280), asfr49=c( 85.4136,180.280))

我需要将 asfr15 除以 asfr49 除以 1000,然后计算它们的总和:

    sample3<- mutate(sample2, TFR=(rowSums(sample2[,7:41]))/1000)

之后,我需要将 [,7:41] 列划分为上一行中计算的 TFR:

    sample4<-((sample3[,2:36])/1000) / sample3[,49]

我编写的代码可以完成工作,但我仍然需要的其他列被省略了。我必须保留列 [,1:6] 和列 [,7:41] 的原始名称。 (列名称不变)

r dplyr data.table
1个回答
0
投票

尝试

TFR <- rowSums(sample[, paste0("asfr", 15:49)]) / 1e3
# (A) modifies data in place 
sample[, paste0("asfr", 15:49)] <- sample[, paste0("asfr", 15:49)] / TFR
# (B) add columns as new renamed columns to original data 
new <- sample[, paste0("asfr", 15:49)] / TFR
names(new) <- paste0("asfrTFR", 15:49)
new_sample <- cbind(sample, new)

这是简单的基本 R 代码。不太确定您想要什么:(A) 更改列

asfr15
直到
asfr49
中的值,或 (B) 保持所有列
asfr15
直到
asfr49
不变,并添加新的
asfrTFR15
直到
asfrTFR49
列计算值。

© www.soinside.com 2019 - 2024. All rights reserved.