2017-06-11 23 views
0

在R,I需要在制表符分隔的文本文件中读取读取数据的子集,但只有行,其中第1列(字符串)等于一个特定的字符串。我被告知我可以使用with()函数来做到这一点,但还没有完成。我可以在2条语句中执行此操作,但我需要使用with()来执行此操作。R:随着功能基于列的1 ==值

下面是我如何使用两个语句完成它:

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

由于我在第1列筛选,我还打算在新的数据帧中删除。

这可能在一个with()功能呢?如果是这样,我是否也可以用相同的表达式显示结果?索引编制会有帮助吗?我无法弄清楚如何为此编制索引工作。

预先感谢您!

+2

为什么你需要使用'with'?此外,你正在做一个行子集,所以我不认为用''是合适的。 –

+1

你是否在用'which哪个?'与'混淆?你可以用'which'做如下的子集:'df [which(df [['C1'] ==“value”),]'EDIT:See also [this question](https://stackoverflow.com/问题/ 6918657/whats-the-use-of-which) – patrick

+0

这是一项家庭作业的一部分:(其中教师要求我们使用'with'函数为**值**行创建逻辑测试并使用负指数去除第一列。通常,我不会把两条线挤在一起,但我没有太多的选择。 –

回答

-1

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

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

-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 
-1

谢谢您的帮助!我已经得出结论,我无法阅读AND subset it 1命令,所以我从之前的数据框中进行子集化。这是我结束了:

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

又一个子集的方式,我想。 R似乎有很多方法可以获得相同的结果。非常有趣的程序!

再次感谢所有!