R函数'子集'

时间:2017-12-08 16:51:27

标签: r dataframe subset

我只是学习使用R,所以对你来说这似乎是一个小问题,但我对函数“子集”有一些问题。我试图在以前的问题中找到答案,但失败了(

例如,我的数据框 q 包含3个变量 x y z

q = read.csv("test.csv",encoding = "UTF-8",
                  header = TRUE, sep = ",", na.strings = c("",NA))

变量 x 有4种含义 a b c d

我试图仅使用变量 x 的两个含义 - a &来创建数据框 q1 C

q1 = subset(q, q$x == 'a' | q$x == 'c')

因此,我有一个新的数据框,其中包含两个含义 x 的含义(我通过打开新的数据框来检查它)。

但是当我从新数据集 q1 表变量 x 时,我又看到4个含义,但是b& d = 0。

我做错了什么?为什么我会看到 b & d ,当我在新数据集中列出 x 时?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

数据框中的列是因子,它是分类变量的另一个名称,可以采用多种可能的字符值之一,或者#34;级别&# 34;,例如"男"或"女性"。

当您对因子进行子集时,您不会更改级别。您所看到的是列表的级别,因此有一些零。

如果您想避免这种情况,请使用as.character功能将因子转换为字符值,或使用stringsAsFactors=FALSE选项将其作为字符读取到read.csv

答案 1 :(得分:1)

factor变量(分类变量的R版本)会记住所有可能的类别,除非您告诉他们不要这样做。您可以使用q1 = droplevels(q1)“忘记”它们,或将factor转换为普通字符串:q1$x = as.character(q1$x)