遍历rep函数中的times参数并将结果存储在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)
...

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

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()创建一个变量名,请与您联系。第二个参数是一个对象(在此为向量),该对象分配给第一个参数中给定的变量名(作为字符串)。

,

使用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创建

,

分配是正确的选择,但是上面的答案却明显地倒退了。您应该将变量所需的文本作为第一个参数,并将所需的值作为第二个参数,这样就可以了。

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