【问题标题】:Design a code to generate specific pattern设计代码以生成特定模式
【发布时间】:2019-12-04 16:46:33
【问题描述】:

是否可以生成一列序列

1 1 2 1 2 3 1 2 3 4 .... so on 

使用dplyr

我尝试了lag() 函数,但没有明确的想法

library(dplyr)
test <- as.data.frame(c(1:1000))
names(test) <- 'a'
# View(test)

test <- test %>% 
  mutate(
    c = # How to make this iterative to generate 1 2 2 3 3 3 4 4 4 4 .. so on
    b = ifelse(a %% c < a , a , NA)
  )

#tried to create 1 2 1 2 1 2 1 2 pattern
test <- test %>% 
  mutate(
    c = 1,
    c = ifelse(c <= lag(c),lag(c)+1,c)
  )

预期输出是序列为1 1 2 1 2 3 1 2 3 4...so on的列

【问题讨论】:

    标签: r vector dplyr


    【解决方案1】:

    当使用 dplyr 时,列的长度应该保持不变。 相反,试试这个

    #custom function
    my.fun <- function (nvec) lapply(1:5, function(x) seq(1,x)) %>% unlist()
    
    #test case with data frame with 12 rows
    data.frame(a = 1:12) %>% 
      mutate(b = my.fun(a)[1:length(a)])
    

    【讨论】:

    • map(1:5, ~seq(1,.)) %&gt;% flatten() %&gt;% unlist(),如果你想完整的tidyverse
    • @kresten 谢谢你的回答。它有帮助。我的疑问是,如果我们已经知道列的长度(假设行数为 12),那么我们只需要序列应该生成的 12 个数字。即 1 1 2 1 2 3 1 2 3 4 1 2. 在变异条件下对 seq 或序列函数应用任何逻辑是否可能
    【解决方案2】:

    试试

    sequence(1:5)
    # [1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
    

    sequencelapplyseq_len 的包装器

    function (nvec) unlist(lapply(nvec, seq_len))
    

    【讨论】:

    • 这是一个很酷的答案。但我不明白。序列不应该意味着序列中的数字吗?
    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2019-12-21
    • 2017-12-16
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多