如何用R的dplyr包mutate函数生成指定序列的新列?
在dplyr中生成从列b到列c的等长序列新列
需求说明
现有如下结构的数据框:
| a | b | c |
|---|---|---|
| 1 | 2 | 10 |
| 2 | 2 | 10 |
| 3 | 2 | 10 |
| 4 | 2 | 10 |
| 5 | 2 | 10 |
需要新增一列,值为从列b的数值(2)到列c的数值(10)的等间隔序列,序列长度与数据框行数一致,最终得到如下结构:
| a | b | c | 新列 |
|---|---|---|---|
| 1 | 2 | 10 | 2 |
| 2 | 2 | 10 | 4 |
| 3 | 2 | 10 | 6 |
| 4 | 2 | 10 | 8 |
| 5 | 2 | 10 | 10 |
数据生成代码
library(tidyverse) n=5 a = seq(1,n,length.out=n) b = rep(2,n) c = rep(10,n) data = tibble(a,b,c)
dplyr实现方法
因为数据框中b和c的所有值完全一致,我们可以直接生成一次等长序列并赋值给新列:
data_new <- data %>% mutate(新列 = seq(first(b), first(c), length.out = nrow(.)))
first(b)和first(c):提取列b和c的第一个值(因所有值相同,取任意一个都可以)length.out = nrow(.):指定序列长度等于当前数据框的行数- 生成的序列会自动匹配到每一行
基础R实现方法
如果不用dplyr,也可以直接用基础R操作:
data$新列 <- seq(data$b[1], data$c[1], length.out = nrow(data))
验证结果
运行上述代码后,data_new(或修改后的data)会得到目标结构的数据框,新列的数值为2,4,6,8,10,完全符合需求。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

