提问人:Yudha Hartono 提问时间:4/29/2022 最后编辑:AndrewGBYudha Hartono 更新时间:4/29/2022 访问量:366
如何仅返回 r 中列表中结果的真实条件?
How To return the true condition only of a result on a list in r?
问:
我的 R 代码有问题。
在这里,我有一个名为 bought_list 的列表,其中包含客户和结账列表(结账是一个数据框),
结帐列表是这样的:
items price qty total
Milk 10 2 20
Dolls 15 10 150
Chocolate 5 5 25
Toys 50 1 50
我想知道哪一个是play_purpose和date_purpose 所以我做了一个布尔变量
play_purpose <- Bought_list[["checkout"]][,"total"] >= 50 & Bought_list[["checkout"]][,"total"] <= 150
date_purpose <- Bought_list[["checkout"]][,"total"] > 0 & Bought_list[["checkout"]][,"total"] < 50
如何像这样返回所选条件的项目名称和总值?
对于play_purpose:
Dolls 150
Toys 50
对于date_purpose :
Milk 20
Chocolate 25
答:
0赞
AndrewGB
4/29/2022
#1
我不清楚你的数据结构,但你可以用你当前的代码进行子集:
play_purpose <-
Bought_list[["checkout"]][Bought_list[["checkout"]][, "total"] >= 50 &
Bought_list[["checkout"]][, "total"] <= 150, c(1, 4)]
# items total
#2 Dolls 150
#4 Toys 50
date_purpose <-
Bought_list[["checkout"]][Bought_list[["checkout"]][, "total"] > 0 &
Bought_list[["checkout"]][, "total"] < 50, c(1, 4)]
# items total
#1 Milk 20
#3 Chocolate 25
另一种选择是使用:dplyr
Bought_list$checkout %>%
filter(total >= 50 & total <= 150) %>%
select(items, total)
Bought_list$checkout %>%
filter(total > 0 & total < 50) %>%
select(items, total)
或者,如果您需要将此函数应用于列表中的多个数据帧,那么我们可以使用:map
purrr
map(Bought_list, ~ .x %>%
filter(total >= 50 & total <= 150) %>%
select(items, total))
map(Bought_list, ~ .x %>%
filter(total > 0 & total < 50) %>%
select(items, total))
数据
Bought_list <- list(checkout = structure(list(items = c("Milk", "Dolls", "Chocolate",
"Toys"), price = c(10L, 15L, 5L, 50L), qty = c(2L, 10L, 5L, 1L
), total = c(20L, 150L, 25L, 50L)), class = "data.frame", row.names = c(NA,
-4L)))
评论
0赞
Onyambu
4/29/2022
请注意,您不能使用该功能。“已购买”列表包含客户 tible,该 tible 可能没有“总计”列,也没有“项目”列。您可能希望坚持使用第一个代码或使用过滤器,但仅在结帐列表中,而不是在购买列表中map
评论