【问题标题】:Using tapply with multiple categories is not working对多个类别使用 tapply 不起作用
【发布时间】:2017-12-03 20:52:10
【问题描述】:

我正在尝试在 R 中使用 tapply,以便它为我提供对应于两个类别(category_name 和 brand_name)的数据的平均值摘要

当我包含一个类别时它工作正常,即:

brandavg <- tapply(train$price, train$brand_name, mean)
head(brandavg, 10)

看起来像:

""               "brandavg"    "brandstd"
"% Pure"          13.85         5.53719480565651
"10.Deep"         21            NA
"21men"           10            NA

但是当我尝试使用以下代码运行两个类别时:

brandcatavg <- tapply(train$price, list(train$brand_name, train$category_name), mean)
head(brandcatavg, 10)

我了解类别名称列表(远远超过 10 个!),但没有平均值。

我确信这有一个我想念的非常简单的解决方案,但我正在努力解决这个问题。

当前的代码尝试是:

brandcatavg <- tapply(train$price, list(train$brand_name, train$category_name), mean)

brandcatavg <- with(train, tapply(price, list(brand_name, category_name), mean))

两者都产生如下所示的东西:

Vintage & Collectibles/Paper Ephemera/Postcard Vintage & Collectibles/Paper Ephemera/Stamps
                 Vintage & Collectibles/Serving/Bowl Vintage & Collectibles/Serving/Casserole
                 Vintage & Collectibles/Serving/Cream and Sugar Set Vintage & Collectibles/Serving/Dinnerware Set
                 Vintage & Collectibles/Serving/Flatware Vintage & Collectibles/Serving/Glassware
                 Vintage & Collectibles/Serving/Mug Vintage & Collectibles/Serving/Other
                 Vintage & Collectibles/Serving/Pitcher Vintage & Collectibles/Serving/Plate
                 Vintage & Collectibles/Serving/Salt and Pepper Shakers Vintage & Collectibles/Serving/Teacup
                 Vintage & Collectibles/Serving/Teapot Vintage & Collectibles/Serving/Tray
                 Vintage & Collectibles/Serving/Tumbler Vintage & Collectibles/Supplies/Bead

(注意我把输出剪掉了……)

当我拉出前 10 列时,它看起来像:

   train_id                                   name item_condition_id                                      category_name

1 0 MLB 辛辛那提红人队 T 恤尺寸 XL 3 男装/上衣/T 恤 2 1 Razer BlackWidow Chroma 键盘 3 电子产品/计算机和平板电脑/组件和零件 3 2 AVA-VIV 衬衫 1 女装/上衣和衬衫/衬衫 4 3 皮革马雕像 1 家居/家居装饰/家居装饰口音 5 4 24K 镀金玫瑰 1 女装/珠宝/项链 6 5 为 Ruie 3 Women/Other/Other 要求的捆绑商品 7 6 Acacia pacific 潮​​汐 santorini top 3 女装/泳装/两件套 8 7 女孩欢呼和翻滚 7 3 运动和户外/服装/女孩 9 8 女童 Nike Pro 短裤 3 运动和户外/服装/女童 10 9 瓷小丑娃娃格子裤 VTG 3 Vintage & Collectibles/Collectibles/Doll 名牌价格运费 1 10 1 2 雷蛇 52 0 3 目标 10 1 4 35 1 5 44 0 6 59 0 7 Acacia 泳装 64 0 8 苏菲 6 1 9 耐克 19 0 10 8 0 商品描述 1 暂无说明 2 这款键盘状况良好,就像开箱即用一样。所有端口都经过测试并且工作正常。灯光可通过 PC 上的 Razer Synapse 应用程序进行自定义。 3 可爱的上衣,带有一丝蕾丝和背面的钥匙孔!淡粉色是 1X,我也有 3X 的白色! 4 新标签。皮马。零售价为 [rm] 每个。站立约一英尺高。它们成对出售。有任何问题请提出。免运费。刚出库 5 附有真品证书 6 条香蕉共和底裤、糖果裙搭配西装外套、Amy Byers 西装、阁楼底和吊带背心。 7 尺寸小,但肩带略微缩短以适合 xs,除此之外,完美状态 8 您将获得三双 Sophie Cheer 短裤中小码女孩和两件中小女孩运动文胸/男孩短裤氨纶搭配套装。所有商品在店内的总零售价为 [rm],您今天可以以低于店内一件商品的价格购买他!) 9 女码小号加绿色。一共三条短裤。 10 我意识到他的裤子在照片后穿反了。它们很脏,所以我用手洗了它们。他有一个填充的身体和彩绘瓷头,手和脚。回到小丑太可怕之前。 9 英寸高。没有碎屑或裂缝,但在一些地方有轻微的油漆损失。小丑马戏团娃娃收藏品

(dput 给了我很奇怪的结果。)

最终让它与代码一起使用:

库(dplyr)

brandcatavg <- train %>%
    group_by(category_name, brand_name) %>%
    summarise(averageprice = mean(price, na.rm=TRUE))

【问题讨论】:

  • 我看不出你的代码有什么明显的错误;你能添加一个你的数据的小例子,因为也许有一些特定的东西。您可以通过使用 dput(droplevels(train[1:10, c("price", "brand_name", "category_name")])) 的结果编辑您的问题来做到这一点
  • 当然。我在上面进行了编辑以显示更多代码!
  • 朱莉娅。请您在使用dput 返回的表单中添加数据 - 这允许用户轻松地将其复制并粘贴到他们的 r 会话中。实际上,用户需要付出一些努力才能使您的数据可用。

标签: r tapply


【解决方案1】:

你很亲密, 试试:

with(train, tapply(price, list(brand_name, category_name), mean))

【讨论】:

  • 感谢您的帮助!但是,在使用此代码时,我似乎遇到了与以前相同的错误(本质上是一个非常长的类别列表,没有方法)
  • 能否提供 5 或 6 行数据。此外,还有其他软件包dplyrreshape2 可以解决此类问题。我可以试试看!
  • 绝对!我在上面进行了编辑以显示几行数据!
  • @JuliaNolan 是否在 csv 文件中?文本文件?做head(df)。这是一个链接,这是一个示例,如何从 R 复制粘贴。meta.stackexchange.com/questions/176460/…
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多