r - 从 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
和
如果
Path
从 开始S1
,该行的值pluging
应该是"class org.esa.s1tbx.io.sentinel1.Sentinel1ProductReaderPlugIn"
如果
Path
从 开始S2
,该行的值pluging
应该是"class org.esa.s2tbx.dataio.s2.ortho.plugins.Sentinel2L1CProduct_Multi_UTM42N_ReaderPlugIn"
为此,我正在考虑使用grepl('S2', Path)
代码来检查条件,但是我不确定如何在dataframe
解决方案
一个选项是stack
from在用序列命名s之后base R
创建一个两列data.frame
list
vector
stack(setNames(Path, seq_along(Path)))[2:1]
或者另一种选择是unlist
并list
创建data.frame
(假设list
元素为length
1)
data.frame(number = seq_along(Path), url = unlist(Path))
如果 的元素list
不相等length
data.frame(number = rep(seq_along(Path), lengths(Path)), url = unlist(Path))
或者我们可以使用enframe
fromtibble
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"))
推荐阅读
- reactjs - React/Express 的代理错误,但只是间歇性的
- node.js - 无法在打字稿构建中包含 .key 文件
- latex - 如何使用 pgfkeys 和宏设置家庭密钥?
- r - 使用所有可能的 var 组合实现 lm 测试的自动化,并获取以下值:R 中的 shapiro.test()、bptest()、vif()
- python - 具有容量约束的 Bellman-ford 算法 - Python
- python - 在 X 个收件人之间分配随机值
- javascript - 将半径变化的圆心放置在 div 的拐角处
- sql-server - SQL CASE 如果日期被引入为 YYYY-DD-MM 以将其转换为 YYYY-MM-DD
- php - 使用 CSS 更改 PHP 文件中的文本颜色
- excel - 如果任何列中有值,则将每一行计为 1