2012-01-19 122 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

相关问题