首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R dplyr向列添加递增的数字

R dplyr向列添加递增的数字
EN

Stack Overflow用户
提问于 2021-01-04 13:43:34
回答 2查看 62关注 0票数 1

我有一个时间序列数据,我想向左添加一个递增的数字。例如,在V1我想加1,在V2我想加2,所以在VN列将得到+N的加法。

因为我的心理模型固定在dplyr类语法上,所以我真的希望尽可能避免循环操作……

我的想法是,当我对这些时间序列数据进行排序/排列时,我希望确保最后一列将获得最高的重要性。这可以通过稍后获得逐行求和来完成。

代码语言:javascript
复制
set.seed(1990)
ID <- rep(c('A','B','C'),each = 1)
n <- sample(c(0,1), replace=TRUE, size=45)
df <- tibble(ID)
df <- cbind(df, as.data.frame(matrix(n, nrow = 3)))

到目前为止,我的表还没有正确排序,因为时间序列在这里和那里有很多空隙。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-04 14:14:31

您可以从tidyr包(属于tidyverse )中使用pivot_longer使df长,添加一个包含要添加的数字的虚拟行,执行加法操作,删除虚拟行并将其带回更宽的形式。

代码语言:javascript
复制
library(tidyverse)
set.seed(1990)
ID <- rep(c('A','B','C'),each = 1)
n <- sample(c(0,1), replace=TRUE, size=45)
df <- tibble(ID)
df <- cbind(df, as.data.frame(matrix(n, nrow = 3)))

df %>% 
  pivot_longer(V1:V15) %>% 
  mutate(rn = rep(1:15,3)) %>% 
  mutate(value = value + rn) %>% 
  select(-rn) %>% 
  pivot_wider()
#> # A tibble: 3 x 16
#>   ID       V1    V2    V3    V4    V5    V6    V7    V8    V9   V10   V11   V12
#>   <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 A         1     3     3     4     6     6     8     8     9    11    12    12
#> 2 B         1     3     4     5     5     6     8     8     9    10    11    12
#> 3 C         2     3     3     5     6     7     8     8     9    10    12    12
#> # … with 3 more variables: V13 <dbl>, V14 <dbl>, V15 <dbl>
票数 3
EN

Stack Overflow用户

发布于 2021-01-04 13:51:40

以下是使用1) Map和2) sweep的几个基本R选项

代码语言:javascript
复制
#1)
df[-1] <- Map(`+`, df[-1], seq_along(df[-1]))

#2)
df[-1] <- sweep(df[-1], 2, seq_along(df[-1]), `+`)

使用最新的dplyr (>=1.0.0),您可以通过以下方式使用cur_column()

代码语言:javascript
复制
library(dplyr)
df %>% mutate(across(V1:V15, ~. + match(cur_column(), names(df)) - 1))

或者使用类似于base R方法的purrrmap2

代码语言:javascript
复制
df[-1] <- purrr::map2(df[-1], seq_along(df[-1]), `+`)

所有这些都会返回:

代码语言:javascript
复制
df
#  ID V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15
#1  A  1  3  3  4  6  6  8  8  9  11  12  12  13  15  16
#2  B  1  3  4  5  5  6  8  8  9  10  11  12  14  14  15
#3  C  2  3  3  5  6  7  8  8  9  10  12  12  14  15  16
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65558154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档