从R中的数据帧中提取元素的值

从R中的数据帧中提取元素的值,r,R,我对R非常陌生,尝试从数据帧中提取特定元素,并将其与整数进行比较 我在文本文件中保存了一个表 我用下面的句子来阅读表格 mydata = read.table("file.txt"); 在我的例子中,我想比较一个元素,比如说USERPOR的第一个元素(它是1.0)和一个整数1.0(因此比较应该返回true) 我写的代码是 mydata[[2,7]] [1] 1.000 Levels: 1.000 10.0000 2.000 3.000 4.00 5.00 6.000 7.000 8.000

我对R非常陌生,尝试从数据帧中提取特定元素,并将其与整数进行比较

我在文本文件中保存了一个表

我用下面的句子来阅读表格

mydata = read.table("file.txt");
在我的例子中,我想比较一个元素,比如说USERPOR的第一个元素(它是1.0)和一个整数1.0(因此比较应该返回true)

我写的代码是

mydata[[2,7]]

[1] 1.000
Levels: 1.000 10.0000 2.000 3.000 4.00 5.00 6.000 7.000 8.000 9.000 USERPROR
然而,当我比较它们时,我得到了“假”。谁能告诉我为什么会这样

> mydata[[2,7]]==1.0

[1] FALSE

嗯。首先,data.frame的元素通常使用单括号访问——比如
mydata[2,7]
。双括号将访问一列,例如,
mydata[[2]]
将返回第二列。因此,
mydata[[7]][2]
mydata[2,7]
相同

其次,由于您的输出包含一个
级别:
列表,因此该变量似乎存储为级别为
“1.000”
“10.0000”
<代码>“USERPROR”(奇怪到我猜数据输入不正确)。因此,我相信在您的示例中,
mydata[2,7]==“1.000”
将返回
TRUE


通常,如果要将数值与整数进行比较,请不要使用类似于
1.0
的比较值,因为thje
.0
部分强制将其存储为浮点,而不是整数。如果数据以浮点形式存储,则可能存在足够的舍入,使得计算为
1.0
的数字不完全等于整数
1
。测试它的可靠方法是使用
round(mydata[2,7])==1

我尝试了round(mydata[2,7])==1。它给了我以下的错误。数学错误。因子(1L):四舍五入对因子没有意义。请看我编辑的问题。对。这是因为这里有一个因子,就像我前面说的,不是浮点值。我重复一遍,我认为您的第一个问题是数据存储不正确。首先把数据放在那里,否则,它就是垃圾输入,垃圾输出。问题是。使用
read.table
读取数据,但包含参数
header=TRUE
。变量名似乎包含在数据中。是“header=true”修复了该问题。因此,实际的问题是读取数据的方式。非常感谢你!我真的花了好几个小时在这上面。很好。我不知道为什么他们在
read.table
中默认设置为
header=FALSE
,但他们做到了。