【问题标题】:How to subset based on multiple variables in one column如何根据一列中的多个变量进行子集化
【发布时间】:2021-01-10 14:45:14
【问题描述】:

下午好,

我正在尝试从以下数据中过滤包含 94 种不同商品以及它们在不同时间售出多少商品的数据框,按总销量最高的 15 种商品:

structure(list(Time = c("07", "07", "07", "07", "07", "08"), 
Item = c("Bread", "Coffee", "Medialuna", "Pastry", "Toast", 
"Afternoon with the baker"), Transactions = c(2L, 13L, 6L, 
2L, 1L, 3L)), row.names = c(NA, -6L), groups = structure(list(
Time = c("07", "08"), .rows = structure(list(1:5, 6L), ptype = integer(0), class = c("vctrs_list_of", 
"vctrs_vctr", "list"))), row.names = 1:2, class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))

我已经按名称知道了 15 个最受欢迎的项目(“咖啡”、“茶”、“面包”等),并且我尝试使用以下代码对数据框进行子集化:

SalesPerTimePerItem <- subset(SalesPerTimePerItem,
                          Item == c("Coffee",
                                    "Tea",
                                    "Bread",
                                    "Cake",
                                    "Pastry",
                                    "Sandwich",
                                    "Medialuna",
                                    "Hot chocolate",
                                    "Cookies",
                                    "Brownie",
                                    "Farm House",
                                    "Muffin",
                                    "Alfajores",
                                    "Juice",
                                    "Soup"))

但是我收到了这个错误:

In Item == c("Coffee", "Tea", "Bread", "Cake", "Pastry", "Sandwich",  :
  longer object length is not a multiple of shorter object length

我还尝试了以下另一种方法:

SalesPTPI <- SalesPTPI[SalesPTPI$Item %in% c("Coffee",
                                         "Tea",
                                         "Bread",
                                         "Cake",
                                         "Pastry",
                                         "Sandwich",
                                         "Medialuna",
                                         "Hot chocolate",
                                         "Cookies",
                                         "Brownie",
                                         "Farm House",
                                         "Muffin",
                                         "Alfajores",
                                         "Juice",
                                         "Soup")]

但得到了错误:

Error: Must subset columns with a valid subscript vector.
i Logical subscripts must match the size of the indexed input.
x Input has size 3 but subscript `i` has size 631.

我的目标是利用这些数据创建一个条形图,如下所示:

但对象不同:

(x = Time, y = Transactions, fill = Item)

如何从顶部包含的数据框中仅过滤掉“咖啡”等响应?

【问题讨论】:

    标签: r dataframe subset


    【解决方案1】:

    您的第一个示例是错误的,因为 == 用于匹配单个值,而不是向量。

    要修复它,请将 == 替换为 %in%


    您的第二个示例是错误的,因为df[df$var %in% vals] 选择列,而不是行。

    要修复它,请在表达式 df[df$var %in% vals,] 后添加一个逗号

    【讨论】:

    • 我知道他们错了,这就是为什么我在这个网站上寻求帮助,这是为了编码帮助。为什么有必要这样编辑我的帖子?您是第一个强制编辑我的帖子的人,其中一些更正甚至不正确。你对每个人的帖子都这样做吗?我是新来的,所以请解释这是否是正常行为。谢谢您的帮助。 (对不起,如果这读起来是粗鲁或对抗性的,我真的很好奇)。
    • 编辑帖子以使其更清晰是标准做法。您认为我的哪些更正不正确?
    • “我如何过滤...”在语法上是不正确的。正确的版本是“我如何过滤...”
    • 这不是我的更改引入的,因为您的版本是:“所以,知道如何过滤”,我只是让它更短。您可以通过单击帖子中我头像上方的小文本来查看我的更改效果,其中显示“50 分钟前编辑”
    • 是的,使用“所以,任何想法...”使该语法在语法上正确。您编辑了一个语法正确的语句并将其转换为一个语法错误的语句。如果您的编辑导致句子不正确,那不是我作为原作者的错,而是您作为编辑的错。您应该校对您的编辑,仅此而已。
    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多