2016-02-24 66 views
-2

值子集的数据帧我有这样的数据帧:包含从阵列

'data.frame': 114034 obs. of 4 variables: 
$ Ore  : chr "01 00" "01 01" "01 02" "01 03" ... 
$ SquareID: chr "10000" "10000" "10000" "10000" ... 
$ Intens : num 0.0118 0.00987 0.00538 0.01318 0.00273 ... 
$ Count : num 69 78 51 86 35 ... 

我需要子集的全部数据帧。 SquareID等于那些数组值的数据帧的行。

Df<-subset.data.frame(Df,Df$SquareID==c(4702,4703,4704,4705,5434,5435,4706,4707,4708,4709,4820,4939,4821,4822,5551,5057,4823,5058,4824,4825,5059,4826,5174,4940,4941,5175,4942,4943,5177,5178,4944,5060,4945,5061,4946,5062,5063,4728,5295,5296,5297,5180,5181,4845,4846,4847,4963,4964,5199,4353,5082,4355,4356,4585,9536,4586,4587,4470,4588,4471,4589,4472,4473,5412,5413,5414,9653,4590,4591,5530,5315,5316,5318) 

这样,我得到了这样的警告和错误的结果:

更长对象长度不短对象长度的倍数

+2

请参阅%“'中的帮助文件'?”%。 – nrussell

+0

我需要子集整个数据帧,我不需要一个向量作为结果 – DanieleO

+1

正确的,子集(Df,%c(...))中的SquareID%)。你的'SquareID'列是'character',但你应该先将它转换为'numeric'。 – nrussell

回答

1

nrussell是正确的。
假设你有一个数据帧

> df <- data.frame(SquareId = c("1","2","3","4"), Intens = c(15,30,45,60)) 
> df 
    SquareId Intens 
1  1  15 
2  2  30 
3  3  45 
4  4  60 

你可以子集是这样的:

> df <- subset(df, SquareId %in% c("2","3")) 
> df 
    SquareId Intens 
2  2  30 
3  3  45 
1

的问题是在该行的逻辑比较:

Df<-subset.data.frame(Df,Df$SquareID==c(4702,4....)) 

Df$SquareID是一个向量长度114034(数据帧的行数),而c(4702,4....)是长度为73的向量,因此longer object length is not a multiple of shorter object length。按照nrussell的建议,你需要%。

Df<-subset(Df,Df$SquareID %in% c(4702,4....))