微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

遍历rep函数中的times参数并将结果存储在R中的新变量中

如何解决遍历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))}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。