Skip to content

longer object length is not a multiple of shorter object length

3 messages · madr, Joshua Wiley, Nordlund, Dan (DSHS/RDA)

#
In datamatrix[, "y"] == datamatrix[, "y"][-1] :
  longer object length is not a multiple of shorter object length

out = c(FALSE,datamatrix[,'y'] == datamatrix[,'y'][-1])

and I do not know why I get that error, the resulting out matrix is somehow
one row larger than datamatrix...
all I try to do is filter matrix by dropping rows where [,'y'][-1] ==
[,'y'][+1]
#
Hi,
On Tue, Dec 7, 2010 at 3:01 PM, madr <madrazel at interia.pl> wrote:
suppose datamatrix has 10 rows, you select column "y", and then for
the equality remove the first 'row' (technically element at this point
since you selected just column "y").  So R is being asked to try to
compare rows 1 through 10 with rows 2 through 10 hence:
perhaps you want to compare rows 1 through 9 with 2 through 10?  That
is, see if there are any differences?  Following through wtih there
being 10 rows, you could remove the last one (replacing 10 with
however many you actually have):

datamatrix[, "y"][-10] == datamatrix[, "y"][-1]

or alternately you might look at the ?diff function:

diff(datamatrix[, "y"])

which will calculate differences based on the set lag (1 by default).
It seems like you might be interested in something like that.

Cheers,

Josh

  
    
#
If I understand what you want correctly, something like this may give you what you want

# create data fraome to work with
x <- 1:10
y <- c(2, 2, 4, 3, 5, 5, 4, 1, 2, 5)
df <- data.frame(x,y)

# out contains rows to drop out
out <- which(c(FALSE, df[-1,'y'] == df[-nrow(df), 'y']))
df[-out,]
 
# keep contains rows to keep
keep <- which(c(TRUE, df[-1,'y'] != df[-nrow(df), 'y']))
df[keep,]

Hope this is helpful,

Dan

Daniel J. Nordlund
Washington State Department of Social and Health Services
Planning, Performance, and Accountability
Research and Data Analysis Division
Olympia, WA 98504-5204