【问题标题】:R: With function to read in subset of data based on column 1 == a valueR:具有根据第 1 列 == 值读取数据子集的功能
【发布时间】:2017-11-13 05:10:16
【问题描述】:

在 R 中,我需要读取制表符分隔的文本文件,但只需要读取第 1 列(字符串)等于特定字符串的行。有人告诉我,我可以使用with() 函数执行此操作,但无法完成。我可以在 2 个语句中执行此操作,但我需要使用 with() 在 1 个语句中执行此操作。

这是我使用这两个语句的方法:

dF <- read.table(file, header=TRUE, sep="\t", na='-999')
dF <- subset(dF,dF$C1=="value")[,-1]

由于我在第 1 列上进行过滤,因此我还将在新数据框中将其删除。

这可以在一个with() 函数中完成吗?如果是这样,我还可以在相同的表达式中显示结果吗?索引会有帮助吗?我不知道如何使索引为此工作。

提前谢谢你!

【问题讨论】:

  • 为什么需要使用with?另外,你正在做一个行子集,所以我认为with 无论如何都不合适。
  • 您是否将withwhich 混淆了?你可以像这样使用which 做子集:df [which (df[['C1']] == "value"),] 编辑:另见this question
  • 这是家庭作业的一部分 :( 教师要求我们使用 with 函数为 value 行创建逻辑测试并使用删除第一列的负索引。通常情况下,我不会将两行都挤成一个,但我在这里没有太多选择。

标签: r dataframe subset with-statement


【解决方案1】:

dF <- read.table(file, header=TRUE, sep="\t", na='-999') dF <- dF[dF$C1=="value",]

您可以使用隐式which 语句。 R 允许用户通过指定 dt[i, j] 中的哪些行或列来对 data.frame 进行子集化。

【讨论】:

    【解决方案2】:

    当您坚持使用基本 R 时,我不建议尝试将太多活动压缩到一行:读取文本文件和处理数据是两个独立的活动,如果您将它们分开是有意义的想要可读的代码。

    如果您确实想保持代码紧凑,并且想将两行代码合二为一,我建议您使用 dplyr 包,它有一个很棒的小功能,称为管道 %&gt;%。这将允许您将一行代码分解为可读的块:

    library(dplyr)
    dF = read.table(file, header=TRUE, sep="\t", na='-999') %>% filter(C1 == "value") %>% select(-C1)
    

    这里又写了几行:

    dF = read.table(file, header=TRUE, sep="\t", na='-999') %>% 
        filter(C1 == "value") %>% # take only the rows where C1 is "value"
        select(-C1) # remove the C1 column
    

    【讨论】:

      【解决方案3】:

      感谢您的帮助!我已经得出结论,我无法读取 AND 子集它 1 命令,所以我从前一个数据帧中提取子集。这是我最终得到的结果:

      newDf &lt;- with(Df,Df[Df$C1=='value',-1])

      我猜只是另一种子集化方式。 R 似乎有很多方法可以得到相同的结果。很有趣的节目!

      再次感谢大家!

      【讨论】:

        猜你喜欢
        • 2018-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-08
        • 2022-01-17
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多