如何仅返回 r 中列表中结果的真实条件?

How To return the true condition only of a result on a list in r?

提问人:Yudha Hartono 提问时间:4/29/2022 最后编辑:AndrewGBYudha Hartono 更新时间:4/29/2022 访问量:366

问:

我的 R 代码有问题。

在这里,我有一个名为 bought_list 的列表,其中包含客户结账列表(结账是一个数据框),

结帐列表是这样的:

items      price qty  total
Milk       10    2    20
Dolls      15    10   150
Chocolate  5     5    25
Toys       50    1    50

我想知道哪一个是play_purposedate_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
r 布尔 条件语句 逻辑

评论


答:

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)

或者,如果您需要将此函数应用于列表中的多个数据帧,那么我们可以使用:mappurrr

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