根据R中2列中的值选择特定行

时间:2012-01-19 20:26:59

标签: database r count plyr

我有一个大型GPS领位置数据集,每天都有不同数量的位置。我想只分析收集了一个位置的日子,并创建一个包含所有信息的新数据框。

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

我正在尝试使用Month和day的值从主数据集中提取包含它们的行,这样我就可以创建一个数据框,其中只包含频率为1但包含所有关联的点数据。我已经到了这一步:

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

...但是这并没有给我任何东西,就个人而言,直觉(R初学者)它应该将包含bro和sis值的行分组出来。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

修:

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

任何特定的MONTH项目都不太可能(并且很可能不可能)与该子集完全相同。你可能更感兴趣的是“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 ##

答案 1 :(得分:0)

之后:

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

试试这个:

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

答案 2 :(得分:0)

data1[rownames(datasub1), ]

这是OP原始思维的延伸,但可能不是他们所追求的,而且正是Wesley所建议的,但是将OP的原始步骤更进一步向前推进(减去兄弟的一部分让我有点困惑,因为。 ..出于同样的原因,DWin说:))。你在rownames之后并不是那些列中的值。你已经掌握了这些信息。行名将该信息传回原始数据集。

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), ]