【问题标题】:wrong result in comparison比较结果错误
【发布时间】:2017-06-09 12:46:38
【问题描述】:

R 初学者在这里。我有一个 data.frame,其中包含有关小跑马的信息(他们的胜利、收入、时间记录等)。我有一个子集的data.frame,其组织方式使每一行都包含马匹竞争的每个特定年份的信息。我有一个名为 Competition.age 的变量,它说明了这些马每年参加比赛的年龄。

我正在使用 summary() 函数和包 psych 中的 describe() 写下按马的年龄和性别分层的汇总统计数据。例如:

summary(Data_year[Data_year$Competition.age>="3"& 
Data_year$Competition.age<="6"& Data_year$Sex=="Mare", ])

这工作得很好。但是当我尝试获得 7 到 10 年之间的范围(而不是 3 和 6 年)时,它只返回 NA。带有这行代码的str() 函数返回一个空白的变量列表——由于某种原因它不会读取数据。

我什至仅用这些年(分别为 7、8、9 和 10 年)创建了单独的子集 data.frames,并且单独地没有问题。我创建了范围为 7-8、7-9 的子集数据帧,它们很好!但是 7-10 创建了一个空的 data.frame。

任何帮助将不胜感激!!

【问题讨论】:

  • 这是一个关于数据的问题,而不是代码本身。可以提供一个小的reproducible example吗?
  • Data_year$Competition.age 是字符向量吗?查看/探索:"3" &lt; "10"(结果为FALSE)但"7" &lt; "8" 给出TRUE
  • @jogo 我知道你要去哪里,但是在 7-8 范围内进行子集化(尽管 Laura 没有展示她是如何做到这一点的)是有效的。
  • 事实如下:"7" 不是数字。如果将数值与非数值(例如字符)进行比较,则数值将强制转换为字符,并且对字符进行比较(按字母顺序)。按字母顺序,"3"大于(之后)"10"
  • 示例:age &lt;- 1:15; sort(as.character(age))

标签: r


【解决方案1】:

在您的评论中,您写的 Data_year$Competition.age 是一个整数。现在是以下事实:"7" 不是数字。如果将数值与非数值(例如字符)进行比较,则数值将被强制转换为字符,并且对字符进行比较(按字母顺序)。按字母顺序排列"3"大于(之后)"10"
看这个例子:

age <- 1:15
sort(as.character(age))

你想要Data_year$Competition.age&gt;=3Data_year$Competition.age&lt;=6等等。

【讨论】:

  • 好的,谢谢!我是这一切的新手,我还不知道这些基本的东西。非常感谢您的帮助!
猜你喜欢
  • 2019-11-19
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多