我只是学习使用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 时?
感谢您的帮助!
答案 0 :(得分:1)
数据框中的列是因子,它是分类变量的另一个名称,可以采用多种可能的字符值之一,或者#34;级别&# 34;,例如"男"或"女性"。
当您对因子进行子集时,您不会更改级别。您所看到的是列表的级别,因此有一些零。
如果您想避免这种情况,请使用as.character
功能将因子转换为字符值,或使用stringsAsFactors=FALSE
选项将其作为字符读取到read.csv
。
答案 1 :(得分:1)
factor
变量(分类变量的R版本)会记住所有可能的类别,除非您告诉他们不要这样做。您可以使用q1 = droplevels(q1)
“忘记”它们,或将factor
转换为普通字符串:q1$x = as.character(q1$x)