2012-01-19 165 views
0

我有一個GPS領位置的大型數據集,每天有不同數量的位置。我只想分開收集單個位置的日子,並創建一個包含所有信息的新數據框。根據R中2列中的值選擇特定行

month day easting northing time ID 
    6  1  ####### ######## 0:00 ## 
    6  2  ####### ######## 6:00 ## 
    6  2  ####### ######## 0:00 ## 
    6  3  ####### ######## 18:00 ## 
    6  3  ####### ######## 12:00 ## 
    6  4  ####### ######## 0:00 ## 
    6  5  ####### ######## 6:00 ## 

目前我已經散列在一起的東西,但不能完全進入下一步。

library(plyr) 
dog<-count(data1,vars=c("MONTH","day")) 
datasub1<-subset(dog,freq==1) 

這讓我讀出看起來像

MONTH day freq 
1  6 29 1 
7  7 5 1 
8  7 6 1 
10  7 8 1 
12  7 10 1 

我想使用的月份和日期的值拉出包含它們從主數據集的行,這樣我可以製作一個數據框,其中只包含頻率爲1的點,但包含所有相關數據。我已經得到了這一點:

sis<-c(datasub1$MONTH) 
bro<-c(datasub1$day) 
datasub2<-subset(data1,MONTH==sis&day==bro) 

...但是,這並沒有給我什麼,親自它具有直觀意義(R初學者),它應該從子集包含兄弟的兩個值的行和姐姐。

任何幫助將不勝感激。

回答

1

修訂:

datasub2<-subset(data1, paste(month,day,sep=".") %in% paste(datasub1$MONTH, datasub1$day,sep=".")) 

這是不太可能(而且很有可能是不可能的),任何特定月份項目會完全相同等於那個子集。您大概更關心的是,「Month.Day」組合是否在datasub1的「Month.Day」組合集中。如果標題如您所示,您已經混合了從count()函數返回的大寫字母。

> dog 
    month day freq 
1  6 1 1 
2  6 2 2 
3  6 3 2 
4  6 4 1 
5  6 5 1 
> datasub1 
    month day freq 
1  6 1 1 
4  6 4 1 
5  6 5 1 
> datasub2 
    month day easting northing time ID 
1  6 1 ####### ######## 0:00 ## 
6  6 4 ####### ######## 0:00 ## 
7  6 5 ####### ######## 6:00 ## 
+0

我對%n%不熟悉,因爲某些原因,當我在谷歌搜索它時,在這裏它只能識別是一個正常的n,即使有引號。該代碼將整個數據集返回給我。我在做bro和sis代碼,因爲數據庫是按年分隔的,所以如果某個特定日期的位置修復頻率是1,那麼在數據集中只有一次月份和日期組合。 – HeidelbergSlide

+0

第一點,它是'%in%'而不是'%n%'。見'help(match)'。第二點,你期待着我們讀出你的想法(迄今爲止不成功),看看「sis」和「bro」中的內容。沒有人明白你的目標是什麼。 –

+0

對不起,我會在幫助部分查看。 – HeidelbergSlide

0

在此之後:

library(plyr) 
dog<-count(data1,vars=c("MONTH","day")) 

試試這個:

indx = which(dog$freq==1) 
data1[indx,] 
+0

不幸的是,當我使用計數代碼時,它會摺疊數據集,那些具有多於一個位置點的那些日子將被放置在一行中。所以數據集從509行變爲149,當我做了上面的代碼時,它給了我對應於149行的行的數據。如果這是有道理的。因此,如果不選擇第7天,而第7天只有一個位置點但位於第25行,它將選擇第7行(每天摺疊爲單行)。那有意義嗎? – HeidelbergSlide

0
data1[rownames(datasub1), ] 

這是OP的原始思維的延伸,但可能不是他們以後有什麼是真正正是韋斯利建議,但承載着OP最初的步驟中的一個比較靠前(減去BRO SIS部分這讓我困惑了一下,因爲......出於同樣的原因,迪文說:))。你在追逐流行音樂並不是那些專欄中的價值。你已經得到了這些信息。行名將該信息帶回原始數據集。

n <- 100 
data1 <- data.frame(
    Accuracy = round(runif(n, 0, 5), 1), 
    MONTH = sample(1:5, n, replace=TRUE), 
    day  = sample(1:28, n, replace=TRUE), 
    Easting = rnorm(n), 
    Northing = rnorm(n), 
    Etc  = rnorm(n) 
) 


library(plyr) 
dog<-count(data1,vars=c("MONTH","day")) 
datasub1<-subset(dog,freq==1) 

data1[rownames(datasub1), ] 
+0

這個代碼與上面的Wesley提供的代碼一樣。不幸的是,當我使用計數代碼摺疊數據集時,那些具有多個位置點的日子被放置在一行中。所以數據集從509行變爲149,當我做了上面的代碼時,它給了我對應於149行的行的數據。如果這是有道理的。因此,如果不選擇第7天,而第7天只有一個位置點但位於第25行,它將選擇第7行(每天摺疊爲單行)。那有意義嗎? – HeidelbergSlide

相關問題