首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过滤数据并使用基R/dplyr保存数据

过滤数据并使用基R/dplyr保存数据
EN

Stack Overflow用户
提问于 2022-10-28 16:48:38
回答 1查看 40关注 0票数 2

我有一个数据集,我正在尝试过滤,得到一个基于类别的数据子集。

代码语言:javascript
复制
df_clean = filter(df_clean, City  %in% c("Chicago","312CHICAGO", "CCHICAGO", "CHCHICAGO",
                              "CHCICAGO","chicago", "Chicago", "CHicago", "CHICAGO",
                              "CHICAGOC","CHICAGOCHICAGO", "CHICAGOI",
                              "CHICAGOO", "312CHICAGO"  ))

City是一个具有许多不同级别(城市)的分类变量,我只想过滤它以显示芝加哥(以及数据集中找到的相关拼写错误)。filter选项似乎不起作用,因为当我在筛选后检查这些级别时,它会给出与应用过滤器之前相同的级别。不知道我做错了什么。

我也尝试过过滤另一个列/分类变量,风险,这也是无效的。风险有以下几个层次。

风险1(高),风险2(中等),风险3(低),全部,零

我不得不求助于使用droplevels(df_Clean$Risk),但我不知道为什么。

代码语言:javascript
复制
df_clean = df_clean [df_clean $Risk %in% c("Risk 1 (High)", "Risk 2 (Medium)", "Risk 3 (Low)"),] 

很明显,当涉及到过滤时,我很困惑,我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-28 17:05:42

当列被定义为一个因子时,它实际上是一个指向字符串字典的整数索引值。仅仅因为您从列中筛选出一个因子,dataframe仍然将该值(和索引)保存在列的字典中,这是将来添加的情况。

因此,为了删除未使用的级别,需要使用droplevels()函数来删除未使用的级别并重新分配其余的级别。

也许这段代码将演示:

代码语言:javascript
复制
demo <- data.frame(id=c(1, 2, 3), animal=c("dog", "cat", "pig"), stringsAsFactors = TRUE)
str(demo)
#1=cat, 2=dog, 3=pig
# factors are sorted in alphabetical order
as.integer(demo$animal)

#remove one factor
reduced <- demo[demo$animal != "cat",]
reduced
as.integer(reduced$animal)
#still 1=cat, 2=dog, 3=pig

#drop level
reduced$animal<- droplevels(reduced$animal)
as.integer(reduced$animal)
#Now 1=dog, 2=pig
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74238490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档