我有一个大型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值的行分组出来。
非常感谢任何帮助。
答案 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), ]