【问题标题】:transform vector into list将向量转换为列表
【发布时间】:2011-07-07 15:29:02
【问题描述】:

我有矢量:c("A","1","2","3","B","4","5","D","6","7","8","9","10") 我想将此向量转换为列表:list(A=c(1,2,3),B=c(4,5),...) 来自向量的字母是向量列表中的名称。向量来自字母之间的数字块。

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一种方法。没什么花哨的,但它可以完成工作。

    x <- c("A","1","2","3","B","4","5","D","6","7","8","9","10")
    y <- cumsum( grepl("[[:alpha:]]", x) )
    z <- list()
    for(i in unique(y)) z[[x[y==i][1]]] <- as.numeric(x[y==i][-1])
    z
    # $A
    # [1] 1 2 3
    #
    # $B
    # [1] 4 5
    #
    # $D
    # [1]  6  7  8  9 10
    
    # UPDATE: Trying to be a bit more "fancy"
    a <- grepl("[[:alpha:]]", x)
    b <- factor(cumsum(a), labels=x[a])
    c <- lapply(split(x,b), function(x) as.numeric(x[-1]))
    

    【讨论】:

    • 你的花式门槛一定比我高,干得好!
    • 我希望我能给这个+100。这是在逻辑向量上非常巧妙地使用cumsum——我可以在我自己的一些代码中看到它的许多应用程序。
    • 谢谢大家。 @Chase:查看我的“花式阈值”更新。 @Sharpie:您总是可以针对该问题提供 100 声望赏金并将其奖励给我。 :-P
    • @Joshua :您实际上调用了列表c? tss tss tss ... ;)
    • @Joshua 这确实是一个非常好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2015-01-30
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多