使用fct_lump()结合filter()筛选观测数超3的城市时出错求助
问题:使用fct_lump()结合filter()时出现逻辑向量错误
我有一个简单数据集,目标是找出观测数(n)超过3的城市,但调用fct_lump()函数时出现错误。
先执行统计代码:
tablo1 |> count(sehir, sort = TRUE)
得到的统计结果中,部分城市如Ankara观测数为23、Antalya为5等。
随后使用以下代码:
tablo1 |> count(sehir) |> filter(fct_lump(sehir, 5, w = n))
收到错误提示:
Error in
filter():
ℹ In argument:fct_lump(sehir, 5, w = n).
Caused by error:
!..1must be a logical vector, not aobject.
执行rlang::last_trace()得到的回溯信息也指向该错误原因,请问问题出在哪里?
问题原因与解决方法
问题根源:
fct_lump()的作用是将频数较低的因子水平合并为"Other",返回的是因子类型的向量,但filter()函数要求传入的必须是逻辑向量(由TRUE/FALSE组成的向量)来判断行的保留与否,两者类型不匹配,因此触发报错。你试图用fct_lump()保留高频城市,但直接放到filter()里是错误用法。针对“筛选n>3的城市”的正确代码:直接对统计得到的
n列做逻辑判断即可:
tablo1 |> count(sehir) |> filter(n > 3)
- 如果需求是保留前5个高频城市:先用
fct_lump()转换因子列,再筛选掉合并后的"Other"组:
tablo1 |> count(sehir) |> mutate(sehir = fct_lump(sehir, 5, w = n)) |> filter(sehir != "Other")
内容的提问来源于stack exchange,提问作者Ali Osman
相关产品推荐
相关产品推荐

