【问题标题】:How do I filter male and female separately in my data set (using r)?如何在我的数据集中分别过滤男性和女性(使用 r)?
【发布时间】:2019-09-04 23:30:05
【问题描述】:

我有一个 .csv 格式的 excel 表加载到 r 中。我想按男性和女性过滤我的数据,但是当我尝试时我无法弄清楚。我的列标题是男性/女性和尺寸 (mm),因此我的数据列出了 M 或 F 和数字。

我试过说

Male <- Male/Female %>% filter(M);
Male <- Male/Female %>% filter(Male/Female <= M)

等等。我不确定我做错了什么。

Screenshot of what my current error messages look like, along with what I have so far

Screenshot of the majority of the data table that I'm trying to work with and filter

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557/3358272(和xkcd.com/2116)。请直接包含代码或数据(例如,dput(head(x))data.frame(...))。
  • Male/Female 不是一个普通的变量名,通常不受欢迎;但是如果你坚持使用它,你必须在它周围使用反引号才能使用它。我不知道flter 是什么,也许你的意思是filter?相等测试需要双等号==,而不是单等号= 的赋值。使用dplyr 时,需要在somewhere 中指定数据框(FrogData)。字符串的比较必须使用实际的字符串如"M",需要引号。也许filter(FrogData, Male/Female` == "M")`?
  • 我敦促您学习如何使用dplyr,无论是通过您的课程(我在做一个假设)还是在线教程。我会从dplyr.tidyverse.org 开始,也许试试vignette("dplyr"),然后寻找其他基于tidyverse 的教程和howtos。
  • @r2evans:您的第二条评论指出了一个比任何适合 dplyr/magrittr 研究的问题都更为基本的问题。这个人不懂基本的 R 语法。需要学习有效对象名称的规则。我认为 dplyr 的作用是掩盖这种理解。过早引入的 NSE 使人们对 R 中的句法问题感到困惑。
  • 我完全同意,@42-,感谢您指出这一点。通常我不知道如何恰当地说某人对 R 语法的掌握显然缺少一些关键概念。我已经阅读了许多关于/反对使用dplyr(和朋友)作为进入 R 的门户的讨论,虽然我同意一些专业人士的观点,但我认为你关于 NSE 模糊事物的观点很突出(data.table 也是)。

标签: r filter


【解决方案1】:

使用方括号进行行和列选择。

# dataframe with one column and four rows
df <- data.frame(sex = c('M', 'F', 'M', 'M'))

# filter to keep only men, keeping all columns
df[df$sex == 'M', ]

输出:

[1] M M M
Levels: F M

如果你喜欢 dplyr/magrittr:

df %>%
    filter(sex == 'M')

【讨论】:

    【解决方案2】:

    创建可重现的示例将帮助您更快地获得帮助。在这里,我将向您展示如何使用一些简单的数据来做到这一点。

    创建假数据:

    library(tibble)
    frogData <- tribble(
      ~`Male/Female`, ~`Size(mm)`, 
      "M", 88.1, 
      "M", 96.7,
      "F", 90.7,
      "F", 89.4
    )
    

    我可以在您的代码中看到几个问题。首先,在使用 dplyr 语法和管道时,您需要了解哪些对象要去哪里。这种情况下可以理解为:

    `new object` <- `existing object` %>% `function`. 
    

    另一个问题是您的原始数据具有非标准变量名称,这些变量名称需要包含在反引号中才能在 R 中使用。为了使事情更简单,通常最好重命名这些变量。完成后,将数据过滤为仅包含男性记录就很简单了。注意使用== 来测试相等语句,= 用于赋值(如&lt;-

    library(dplyr)
    # Rename variables
    frogData <- frogData %>% 
      rename(sex = `Male/Female`, 
             size = `Size(mm)`)
    
    # Create dataset with only males
    Male <- frogData %>% 
      filter(sex == "M")
    

    【讨论】:

      猜你喜欢
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      相关资源
      最近更新 更多