【发布时间】: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 会话中。实际上,用户需要付出一些努力才能使您的数据可用。