【发布时间】:2020-07-07 10:37:43
【问题描述】:
我有一个示例数据集garden,如下所示。真正的东西是数千行。我也有一个示例列表。 productFruit。考虑到garden 中报告的usage,我想知道每个fruit 的calories。我基本上想遍历表中的所有行,检查productFruit 列表中的用法是否为recorded,并返回calories 或以下错误消息之一:
- 如果在
productFruit列表中没有找到usage,则“使用超出范围” - 如果在
productFruit列表中没有找到usage,则“水果超出范围” - “错误数据”如果数据丢失
garden:
fruit = c("Apple", "Kiwi", "Banana", "Orange", "Blueberry")
usage = c("cooking", "cooking", "NA", "drinking", "medicine")
reported = c(200, 500, 77, 520, 303)
garden <- cbind(fruit, usage, reported)
garden <- as.data.table(garden)
productFruit:
productFruit <- list(Basket = c('DUH'),
type = list (
Apple = list(ID = 1,
color = "poor",
usage = list(eating = list(ID = 1,
quality = "good",
calories = 500),
medicine = list(ID = 2,
quality = "poor",
calories = 300))),
Orange = list(ID = c(1,2,3),
color = c(3,4,5),
usage = list(eating = list(ID = 1,
quality = "poor",
calories = 420),
cooking = list(ID = 2,
quality = "questionable",
calories = 600),
drinking = list(ID = 3,
quality = "good",
calories = 800),
medicine = list(ID = 4,
quality = "good",
calories = 0))),
Banana = list(ID = c(1,2,3),
color = c(3,4,5),
usage = list(cooking = list(ID = 1,
quality = "good",
calories = 49),
drinking = list(ID = 2,
quality = "questionable",
calories = 11),
medicine = list(ID = 3,
quality = "poor",
calories = 55)))))
我试图将其分解为更小的步骤并使用循环来执行此操作,但我对lists 的经验很少,并且遇到了很多错误。任何想法如何以有效且可读的方式解决这个问题?下面是我尝试匹配fruits 的众多尝试之一。我知道该字段不匹配,我只是想让循环运行...
for (i in seq_len(nrow(garden))){
if (garden$fruit[i] == productFruit$type){
garden$calories = productFruit$type[[i]]$ID
}
garden$calories = "error"
}
想要的输出是这样的:
fruit = c("Apple", "Kiwi", "Banana", "Orange", "Blueberry")
usage = c("cooking", "cooking", "NA", "drinking", "medicine")
reported = c(200, 500, 77, 520, 303)
calories = c("usage out of scope", "fruit out of scope", "erroneous data", 800, "fruit out of scope")
garden_with_calories <- cbind(fruit, usage, reported, calories)
garden_with_calories <- as.data.table(garden)
【问题讨论】:
-
您有
gardendataframe或productFruitlist的可用数据?还是两者兼而有之? -
我已经大大简化了我的答案。我很好奇它对其他发布的解决方案的表现如何。
标签: r loops for-loop data.table