将向量列表的列表转换为R中的数据帧

时间:2016-03-29 00:04:25

标签: r dataframe

我有一个字符向量列表列表,其形式如下:

terms <- list(
    term_id = c("1", "2", "3"),
    major_cd = list(
      c("ABCD", "AS56"),
      c("RCPZ", "AS56"),
      c("RCET", "ABCD", "RCPZ", "AS56")
    )
  )

我想创建一个数据框,如:

> df
  term_id major_cd
1  "1"      "ABCD"
2  "1"      "AS56"
3  "2"      "RCPZ"
4  "2"      "AS56"
5  "3"      "RCET"
6  "3"      "ABCD"
7  "3"      "RCPZ"
8  "3"      "AS56"
> class(df)
[1] "data.frame"

3 个答案:

答案 0 :(得分:2)

在Hadleyverse中,您可以使用<?php $to = "somebody@example.com"; $subject = "My subject"; $txt = "Hello world!"; $headers = "From: webmaster@example.com" . "\r\n" . "CC: somebodyelse@example.com"; mail($to,$subject,$txt,$headers); ?>

unnest

我已经使用了library(dplyr) library(tidyr) as_data_frame(terms) %>% unnest ## Source: local data frame [8 x 2] ## ## term_id major_cd ## (chr) (chr) ## 1 1 ABCD ## 2 1 AS56 ## 3 2 RCPZ ## 4 2 AS56 ## 5 3 RCET ## 6 3 ABCD ## 7 3 RCPZ ## 8 3 AS56 ,因为它可以方便地使用as_data_frame列而无需额外的工作。

答案 1 :(得分:1)

你可以这样做:

   df <- data.frame(
      term_id = rep(terms$term_id, lengths(terms$major_cd),
      major_cd = unlist(terms$major_cd)
    )

  term_id major_cd
1       1     ABCD
2       1     AS56
3       2     RCPZ
4       2     AS56
5       3     RCET
6       3     ABCD
7       3     RCPZ
8       3     AS56

答案 2 :(得分:1)

我们可以在设置&#39; major_cd&#39;的名称后使用stack执行此操作与&#39; term_id&#39;

res <- stack(with(terms, setNames(major_cd, term_id)))[2:1]
res
#  ind values
#1   1   ABCD
#2   1   AS56
#3   2   RCPZ
#4   2   AS56
#5   3   RCET
#6   3   ABCD
#7   3   RCPZ
#8   3   AS56

如果需要,我们可以更改列名

colnames(res) <- names(terms)

注意:不使用其他包。

相关问题