2013-03-21 82 views
2

我有一個n由m data.frame其中列1具有感興趣的信息。我想根據第1列的一行中的值來創建子data.frame從data.frame中提取行

例子:

P Cat Q S... nth Column 
S data data data data 
S ...  ...  
A ... 
I ... 
. ... 
. ... 
. ... 
mth row 

現在我想要做的就是創建一個data.frame,其中列P具有S,隨後的一個用於...等的值。

我一直不成功嘗試的東西,如:

s <- data.frame(df1$P = S) 
s <- data.frame(df1$P [,:5]) <- #In this case the data I want stops at row 5 

我想的東西落得像

s = P Data1 Data2 Data3 Data nth 
    S 
    S 
    ... 
    S 

謝謝

回答

0

相反的:

s <- data.frame(df1$P = S) 

嘗試:

s <- data.frame(df1[df1$P == S,]) 

s <- data.frame(df1[df1$P == 'S',]) 
如果你想控制的行數

嘗試:

s <- data.frame(df1[df1$P == 'S',1:5]) 
+0

非常感謝,第三個是我想要的那個,它像一個魅力。 – 2013-03-21 18:39:28

+0

我不認爲有必要將所有這些選擇都包含在'data.frame(...)'中 - 無論如何,結果將會是'data.frame'。 – thelatemail 2013-03-21 20:26:27

1

破壞你的數據到data.frames使用split也可以在這裏工作的list,並防止混亂你的工作區。例如:

df1 <- data.frame(P=c("S","S","A","I"),data=rep(1,4)) 
df1 

# P data 
#1 S 1 
#2 S 1 
#3 A 1 
#4 I 1 

result <- split(df1,df1$P) 

#$A 
# P data 
#3 A 1 
# 
#$I 
# P data 
#4 I 1 
# 
#$S 
# P data 
#1 S 1 
#2 S 1 

然後,您可以訪問列表類似的部分:

result$S 

result[["S"]] 

瞧:

# P data 
#1 S 1 
#2 S 1