2017-06-11 39 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似乎有很多方法可以獲得相同的結果。非常有趣的程序!

再次感謝所有!