首页 > 解决方案 > 从 R 中的列表创建数据框

问题描述

我有一个列表Path,我想从中创建一个dataframe具有以下特征的列表:2 列,number以及uri与列表中的位置一样多的行Path

> Path
[[1]]
[1] S1A_IW_GRDH_1SDV_20190818T175529_20190818T175554_028627_033D25_22ED.SAFE

[[2]]
[1] S2A_MSIL1C_20190823T061631_N0208_R034_T42TXS_20190823T081730.SAFE

为此,我开始使用此代码。

df <- data.frame(number = c(1:length(Path)),
                 uri = c(Path[[1]], Path[[2]]))

number列已使用 链接到Path列表的维度1:length(Path),但是,如何uri相应地填充该列。意思是, 的值Path[[1]]应该在row 1, column uri, 等等,以防万一Path有更多的值?

- 编辑 -

我需要将第三列添加到dataframe哪个内容应该取决于Path[[i]]. 第三列将被称为plugin

为此,我正在考虑使用grepl('S2', Path)代码来检查条件,但是我不确定如何在dataframe

标签: rdataframe

解决方案


一个选项是stackfrom在用序列命名s之后base R创建一个两列data.framelistvector

stack(setNames(Path, seq_along(Path)))[2:1]

或者另一种选择是unlistlist创建data.frame(假设list元素为length1)

data.frame(number = seq_along(Path), url = unlist(Path))

如果 的元素list不相等length

data.frame(number = rep(seq_along(Path), lengths(Path)), url = unlist(Path))

或者我们可以使用enframefromtibble

library(tibble)
library(tidyr)
library(purrr)   
library(dplyr) 
enframe(Path, name = "number", value = "url") %>%
      unnest %>%
      mutate(Plugin = case_when(substr(url, 1, 2) == "S1" ~ "class org.esa.s1tbx.io.sentinel1.Sentinel1ProductReaderPlugIn", TRUE ~ "class org.esa.s2tbx.dataio.s2.ortho.plugins.Sentinel2L1CProduct_Multi_UTM42N_ReaderPlugIn"))

推荐阅读