如何统计R数据框中amenities列每行包含的设施数量
结论
这种方法仅在所有设施名称都不包含英文逗号的前提下成立,否则会出现计数偏高的错误,更稳妥的方法是直接解析JSON格式的字段内容后统计长度,避免边界问题。
两种实现方案
方案1:解析JSON统计(推荐,无边界问题)
你拿到的amenities列是JSON数组格式的字符串存为了因子类型,如果某个设施的名称本身就包含英文逗号(比如部分标注会写"Indoor fireplace, firewood included"这类组合设施名),统计逗号的方法就会把单个设施误算成多个,因此推荐用JSON解析的方法计算:
# 加载依赖包 library(jsonlite) # 先把因子转成字符,再逐个解析JSON数组统计长度 airbnbT$amenity_count <- sapply(as.character(airbnbT$amenities), function(x) { length(fromJSON(x)) })
该方法得到的计数完全匹配实际设施数量,不需要考虑字段内容里的特殊符号问题。
方案2:统计逗号计算(仅适用于无逗号的场景)
如果你的数据集已经确认所有设施名称均不含英文逗号,也可以用统计逗号后加1的方法快速计算:
library(stringr) airbnbT$amenity_count <- str_count(as.character(airbnbT$amenities), ",") + 1
你给出的示例中27个设施对应26个逗号,加1刚好得到正确结果。
内容的提问来源于stack exchange,提问作者Noor
相关产品推荐
相关产品推荐

