r - 如何对 data.frames 列表进行子集化?

标签 r

我有一个 data.frames 列表,想对一部分数据帧进行子集化。 在这种情况下,我想将 mainlistsublist1 和 sublist2 中的 rainfallyield 子集并创建一个新的名为 mainlist_new 的列表。

但是我遇到了这个错误Error in mainlist[[1]][[, 2:3]] : incorrect number of subscripts

有什么想法和想法吗?

这里是代码和创建的数据

> df1 <- data.frame(station = c("MADA1", "MADA2", "MADA3", "MADA4", "MADA5"),
+                  rainfall = c(0, 5, 10, 15, 20),
+                  yield = c(2000, 3000, 4000, 5000, 6000))
> df2 <- df1
> df3 <- df1
> 
> list_1 <- list(df1, df2, df3)
> 
> list_2 <- list(df1, df2, df3)
> 
> mainlist <- list(list_1, list_2)
> names(mainlist) <- c("sublist1", 'sublist2')
> names(mainlist[[1]]) <- c("station", "rainfall", "yield")
> names(mainlist[[2]]) <-  c("station", "rainfall", "yield")
> 
> names(mainlist)
[1] "sublist1" "sublist2"
> names(mainlist[[1]])
[1] "station"  "rainfall" "yield"   
> 
> # subset `rainfall` and `yield` is sublist1 and sublist2 and create a a new list
> mainlist_new <- list()
> mainlist_new[[1]] <- mainlist[[1]][[,2:3]] 
Error in mainlist[[1]][[, 2:3]] : incorrect number of subscripts
> mainlist_new[[2]] <- mainlist[[2]][[,2:3]] 
Error in mainlist[[2]][[, 2:3]] : incorrect number of subscripts
>

最佳答案

如果我们想根据名称对 list 元素进行子集化

mainlist_new <- lapply(mainlist, `[`, c("rainfall", "yield"))

-输出

> str(mainlist_new)
List of 2
 $ :List of 2
  ..$ rainfall:'data.frame':    5 obs. of  3 variables:
  .. ..$ station : chr [1:5] "MADA1" "MADA2" "MADA3" "MADA4" ...
  .. ..$ rainfall: num [1:5] 0 5 10 15 20
  .. ..$ yield   : num [1:5] 2000 3000 4000 5000 6000
  ..$ yield   :'data.frame':    5 obs. of  3 variables:
  .. ..$ station : chr [1:5] "MADA1" "MADA2" "MADA3" "MADA4" ...
  .. ..$ rainfall: num [1:5] 0 5 10 15 20
  .. ..$ yield   : num [1:5] 2000 3000 4000 5000 6000
 $ :List of 2
  ..$ rainfall:'data.frame':    5 obs. of  3 variables:
  .. ..$ station : chr [1:5] "MADA1" "MADA2" "MADA3" "MADA4" ...
  .. ..$ rainfall: num [1:5] 0 5 10 15 20
  .. ..$ yield   : num [1:5] 2000 3000 4000 5000 6000
  ..$ yield   :'data.frame':    5 obs. of  3 variables:
  .. ..$ station : chr [1:5] "MADA1" "MADA2" "MADA3" "MADA4" ...
  .. ..$ rainfall: num [1:5] 0 5 10 15 20
  .. ..$ yield   : num [1:5] 2000 3000 4000 5000 6000

关于r - 如何对 data.frames 列表进行子集化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71801655/

相关文章:

r - 在使用 ldpy 将数据帧列表合并为一个之前/之后向数据帧的每一行添加标识符

r - 求序数中位数的惯用方法

在 C 中从 R 包调用 C 代码

r - 在 case_when() 中抛出错误

r - 使用插入符号完全可重现的并行模型

r - 如何在R包“raster”的“plot.raster”中删除框框

r - gganimate:具有不同几何形状和时间点的两层

r - 如何管理用于图形目的的日期格式?

r - 在 Shiny 的应用程序中存储 RHandsontable 的编辑

R SAP Hana 与 Windows 的 ODBC 集成