[英]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.