遍历 rep() 函数中的时间参数并将结果存储在 R 中的新变量中

Iterate through times argument in rep()-function and store result in new variable in R

我有一个如下所示的数据框:

> df
 1  2  3  4  5  7  8  9 10 11 12 13 14 15 16 
 1  6  0  0  0  0  0  3  0  0  0  0  0  0  1 

我尝试通过 df 中的条目复制数字 1540 并将它们存储在 length(df) 新变量中。所以,这个循环应该输出16个变量,例如

a1b <- c(1540)
a2b <- c(1540,1540,1540,1540,1540,1540)
...

我试图解决这个问题,例如,使用下面的代码,但这不起作用。

df <- P1_2008[1:16]
for(i in 1:15){
  paste0("a",i,"b") <- rep(c(1540), times = df[i])
}

有人知道如何解决这个问题吗?

此致, 丹尼尔

df 的输出是

dput(df)
c(`1` = 1, `2` = 6, `3` = 0, `4` = 0, `5` = 0, `7` = 0, `8` = 0, 
`9` = 3, `10` = 0, `11` = 0, `12` = 0, `13` = 0, `14` = 0, `15` = 0, 
`16` = 1)

这有帮助吗?

for(i in 1:15){
    assign(paste0("a",i,"b"), rep(c(1540), times = df[i]))
}

如果你想从字符串创建变量名 assign() 是你的朋友。第二个参数是一个对象(在这个向量中),它被分配给第一个参数中给定的变量名称(作为字符串)。

赋值是正确的选择,但上面的答案稍微倒退了。您应该为变量提供所需的文本作为第一个参数,并提供所需的值作为第二个参数,这样应该可以。

for (i in 1:16){assign(paste0('a',i,'b'),rep(1540,i))}

使用tidyverse

library(tidyverse)
df <- read.table(text = "1  6  0  0  0  0  0  3  0  0  0  0  0  0  1", header = F)
out <- map(df, ~rep(1540, .x)) %>% purrr::set_names(., paste0("a", seq_along(df), "b"))
list2env(out, envir = .GlobalEnv)
#> <environment: R_GlobalEnv>

reprex package (v0.3.0)

于 2020-09-30 创建