簡體   English   中英

R 將 data.frame 中的值分配給列表

[英]R Assign values from a data.frame to a list

我有一個列表,其中包含工廠的一些基本特征(如產能、營業額)。 所有值最初設置為 NULL:

#My List:
list.var <- list(Capacity = NULL, Production = NULL)
list <- list(Factory1 = list.var, Factory2 = list.var)
> list
$Factory1
$Factory1$Capacity
NULL

$Factory1$Production
NULL


$Factory2
$Factory2$Capacity
NULL

$Factory2$Production
NULL

我也有數據框,其中包含所有工廠的每個特征的“缺失”值,如下所示:

> #My Data Frame:
> df.capacity <- data.frame(Factory = c("Factory1", "Factory2"), Capacity = c(100,200))
> df.capacity
   Factory Capacity
1 Factory1      100
2 Factory2      200

我想將df.capacity中的容量值分配給我列表中的相應工廠。 結果應如下所示:

$Factory1
$Factory1$Capacity
[1] 100

$Factory1$Production
NULL


$Factory2
$Factory2$Capacity
[1] 200

$Factory2$Production
NULL

我怎樣才能做到這一點? (請注意,我有多個工廠,甚至更多特性,因此我應該每次都自動執行,例如數據幀的左連接)。 我嘗試將數據框轉換為列表,然后與原始列表合並,但它對我不起作用。

從基礎 R,您還可以執行以下操作:

modifyList(list, split(df.capacity[-1], df.capacity[1]))

$Factory1
$Factory1$Capacity
[1] 100

$Factory1$Production
NULL


$Factory2
$Factory2$Capacity
[1] 200

$Factory2$Production
NULL

我們可以match得到對應的值,然后進行賦值

library(purrr)
imap(list, ~  {
      .x$Capacity <- df.capacity$Capacity[match(.y, df.capacity$Factory)]
       .x})

或使用來自base R Map Map

Map(function(x, y) {
         x$Capacity <- df.capacity$Capacity[match(y, df.capacity$Factory)]
         x

       },
      list, names(list))

-輸出

$Factory1
$Factory1$Capacity
[1] 100

$Factory1$Production
NULL


$Factory2
$Factory2$Capacity
[1] 200

$Factory2$Production
NULL

或使用for循環

for(i in seq_along(df.capacity$Factory)) list[[df.capacity$Factory[i]]]$Capacity <- df.capacity$Capacity[i]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM