R:具有基于第1列读取数据子集的函数==一个值

时间:2017-06-11 18:35:08

标签: r dataframe subset with-statement

在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()函数中执行吗?如果是这样,我还可以在同一个表达式中显示结果吗?索引会有帮助吗?我无法弄清楚如何使索引工作。

提前谢谢!

3 个答案:

答案 0 :(得分:-1)

bundle exec rails g controller Welcome index

您可以使用隐式dF <- read.table(file, header=TRUE, sep="\t", na='-999') dF <- dF[dF$C1=="value",]语句。 R允许用户通过指定dt [i,j]中的哪些行或列来对data.frame进行子集化。

答案 1 :(得分:-1)

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

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

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

答案 2 :(得分:-1)

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

newDf <- with(Df,Df[Df$C1=='value',-1])

我想是另一种分组方式。 R似乎有很多方法可以获得相同的结果。非常有趣的节目!

再次感谢,全部!