【问题标题】:How to write a loop to complete the batch rename in R?如何编写一个循环来完成R中的批量重命名?
【发布时间】:2021-12-08 05:49:01
【问题描述】:

这是我的代码,我想把数据改成数据。数据表有两列想删除第二列,把第一列的名字从LAST改成r1,r1....rn

rawdata.xts_funTS_returns_r0 <- rawdata.xts_funTS_returns_r0 %>% 
  dplyr::rename(r0 = LAST) %>% 
  .[,-2]
rawdata.xts_funTS_returns_r1 <- rawdata.xts_funTS_returns_r1 %>% 
  dplyr::rename(r1 = LAST) %>% 
  .[,-2]
rawdata.xts_funTS_returns_r2 <- rawdata.xts_funTS_returns_r2 %>% 
  dplyr::rename(r2 = LAST) %>% 
  .[,-2]
rawdata.xts_funTS_returns_r3 <- rawdata.xts_funTS_returns_r3 %>% 
  dplyr::rename(r3 = LAST) %>% 
  .[,-2]
rawdata.xts_funTS_returns_r4 <- rawdata.xts_funTS_returns_r4 %>% 
  dplyr::rename(r4 = LAST) %>% 
  .[,-2]
rawdata.xts_funTS_returns_r5 <- rawdata.xts_funTS_returns_r5 %>% 
  dplyr::rename(r5 = LAST) %>% 
  .[,-2]
rawdata.xts_funTS_returns_r6 <- rawdata.xts_funTS_returns_r6 %>% 
  dplyr::rename(r6 = LAST) %>% 
  .[,-2]

【问题讨论】:

  • 嗨@TAT,你能解决这个问题吗?

标签: r loops rename


【解决方案1】:

这是一般的想法:循环每个 rn 值,在你的环境中获取相应的对象,做你的 dplyr 业务,然后将每次迭代的结果保存在一个列表中,其中对象由它们的 rn 值索引。

library(dplyr)

ll <- list()
for(i in 0:6){
  v <- paste0("r", i)
  temp <- get(paste0("rawdata.xts_funTS_returns_", v))
  ll[[v]] <- temp %>% 
    dplyr::rename(!!v := LAST) %>% 
    .[,-2]
}

# Might be convenient to combine each list element into a dataframe
df <- do.call(cbind, ll)
head(df)
#>       r0  r1  r2  r3  r4  r5  r6
#> [1,] 5.1 5.1 5.1 5.1 5.1 5.1 5.1
#> [2,] 4.9 4.9 4.9 4.9 4.9 4.9 4.9
#> [3,] 4.7 4.7 4.7 4.7 4.7 4.7 4.7
#> [4,] 4.6 4.6 4.6 4.6 4.6 4.6 4.6
#> [5,] 5.0 5.0 5.0 5.0 5.0 5.0 5.0
#> [6,] 5.4 5.4 5.4 5.4 5.4 5.4 5.4

# Or do it vectorized
tat <- function(i){
  v <- paste0("r", i)
  temp <- get(paste0("rawdata.xts_funTS_returns_", v))
  ll[[v]] <- temp %>% 
    dplyr::rename(!!v := LAST) %>% 
    .[,-2]
}
sapply(0:6, tat)
       [,1] [,2] [,3] [,4] [,5] [,6] [,7]
  [1,]  5.1  5.1  5.1  5.1  5.1  5.1  5.1
  [2,]  4.9  4.9  4.9  4.9  4.9  4.9  4.9
  [3,]  4.7  4.7  4.7  4.7  4.7  4.7  4.7
  [4,]  4.6  4.6  4.6  4.6  4.6  4.6  4.6
  [5,]  5.0  5.0  5.0  5.0  5.0  5.0  5.0
  [6,]  5.4  5.4  5.4  5.4  5.4  5.4  5.4
  [7,]  4.6  4.6  4.6  4.6  4.6  4.6  4.6
  [8,]  5.0  5.0  5.0  5.0  5.0  5.0  5.0
  [9,]  4.4  4.4  4.4  4.4  4.4  4.4  4.4
 [10,]  4.9  4.9  4.9  4.9  4.9  4.9  4.9

示例数据:

iris2 <- as.data.frame(cbind(iris[,1], LAST = 1))
rawdata.xts_funTS_returns_r0 <- iris2
rawdata.xts_funTS_returns_r1 <- iris2
rawdata.xts_funTS_returns_r2 <- iris2
rawdata.xts_funTS_returns_r3 <- iris2
rawdata.xts_funTS_returns_r4 <- iris2
rawdata.xts_funTS_returns_r5 <- iris2
rawdata.xts_funTS_returns_r6 <- iris2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 2019-11-30
    • 2016-10-17
    • 2014-06-17
    • 2016-11-13
    • 2015-11-01
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多