【问题标题】:Unlist data frame column wihtout losing information from other column取消列出数据框列而不丢失另一列的信息
【发布时间】:2015-11-18 10:40:22
【问题描述】:

我找到了一个post,和我的问题很相似。 我有一个带有关键字列表的data.frame,这些关键字在一个列中用分号分隔,在另一列中用年份分隔。我想在不丢失年份信息的情况下取消列出关键字。

我可以用 strsplit 和 unlist 分隔关键字

keywords <- unlist(strsplit(df$keywords,";"))
l1 <- sapply(df$keywords, length)
Year <- rep(df$Year, l1)
length(Year)
length(keywords)
dfkeywords=data.frame(Year=Year, Keywords=keywords, stringsAsFactors = F)

但我未能生成与关键字向量长度相同的年份向量。

我该如何以聪明的方式做到这一点?

最好的 皮特

【问题讨论】:

  • 试试:library(splitstackshape); cSplit(df, "keywords", ";", "long") 看看是否能满足您的需求。
  • 我们能得到一个可重现的例子吗? stackoverflow.com/questions/5963269/…

标签: r list dataframe strsplit


【解决方案1】:

在取消列出拆分关键字之前计算长度。所以拆分关键字

keywords = strsplit(df$keywords,";")

找出每条记录的长度(关键词的数量)

lens = lengths(keywords)

创建data.frame

data.frame(Year=rep(df$Year, lens), Keywords=unlist(keywords),
           stringsAsFactors=FALSE)

【讨论】:

    【解决方案2】:

    假设你有这样的东西:

    df <- data.frame(keywords = c("some;text", "some;other;text", "even;more;text;here"),
                     Year = c(2025, 2026, 2099))
    df
    #              keywords Year
    # 1           some;text 2025
    # 2     some;other;text 2026
    # 3 even;more;text;here 2099
    

    那么我建议你考虑使用我的“splitstackshape”包中的cSplit

    library(splitstackshape)
    cSplit(df, "keywords", ";", "long")
    #    keywords Year
    # 1:     some 2025
    # 2:     text 2025
    # 3:     some 2026
    # 4:    other 2026
    # 5:     text 2026
    # 6:     even 2099
    # 7:     more 2099
    # 8:     text 2099
    # 9:     here 2099
    

    其他需要考虑的方法是:

    “dplyr”+“tidyr”

    library(dplyr)
    library(tidyr)
    df %>%
      mutate(keywords = strsplit(as.character(keywords), ";")) %>%
      unnest(keywords)
    

    “数据表”

    library(data.table)
    as.data.table(df)[, list(keywords = unlist(strsplit(as.character(keywords), ";"))), 
                      by = Year]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2017-09-08
      相关资源
      最近更新 更多