[R] "argument is missing, with no default" OR "replacement has length zero"

David Winsemius dwinsemius at comcast.net
Mon Nov 26 02:24:04 CET 2012


On Nov 25, 2012, at 10:22 AM, lind35 wrote:

> Hello,
>  I have a new data set and an old data set. Both have the same columns
> representing the same sort of measure. Within each data set (old and  
> new)
> are 18 groups (simplified to three groups below). Within each group  
> are
> individuals with unique ID numbers. These ID numbers may be the same  
> as
> other ID numbers in different groups, but a particular ID number only
> appears once in each group.
>  The old data set does not include all of the individuals from the  
> new data
> set - meaning IDs within groups in the new data set are not found  
> within the
> old data set or visa versa. I am trying to extract data from a  
> particular
> column for unique individuals within a unique group from the old  
> data set
> and put that info into a column within the row for that particular  
> unique
> individual/group in the new data set. However, I keep coming up with R
> errors.
>
> Basically it's set up like this (i've simplified the data to  
> illustrate the
> important stuff)
> old <- read.csv("/Users/Me/Desktop/old data.csv")
> new <- read.csv("/Users/Me/Desktop/new data.csv")
>
>> new
>      [group] [ID] [column where I want to put the data, currently  
> blank]
> [1,]   1   800      __
> [2,]   1   23        __
> [3,]   1   542      __
> [4,]   2   23        __
> [5,]   2   2318   __
> [6,]   2   45        __
> [7,]   3   1345   __
> [8,]   3   800      __
> [9,]   3   232      __
>> old
>      [group] [ID] [data I want for the new.object]
>  [1,]   1   300      12.2
> [2,]   1  155     10.8
> [3,]   1   23        9.2
> [4,]   2   45        15.6
> [5,]   2   1289   5.5
> [6,]   2   23        4.2
> [7,]   3   800      3.3
> [8,]   3   232     18.0
> [9,]   3   1345   21.1
>
> #and this is what I want to get as an end result
>> new
> [1,]   1   800      __
> [2,]   1   23        9.2
> [3,]   1   542      __
> [4,]   2   23        4.2
> [5,]   2   2318   __
> [6,]   2   45        15.6
> [7,]   3   1345   21.1
> [8,]   3   800      3.3
> [9,]   3   232      18.0
>
> I've tried the following codes but keep getting error messages
>
>> for (i in 1) {
> +        new[i,3] <- old[which(old[,2] == new[i,2] & old[,1] ==  
> new[i,1]),3]
> + }
> Error in `[<-.data.frame`(`*tmp*`, i, 11, value = numeric(0)) :
>  replacement has length zero
>
> #OR
>> for (i in 1) {
> +        data[[i,11]] <- as.numeric(old[[which(old[[,22]] == data[[i, 
> 2]] &
> old[[,1]] == data[[i,1]]),46]])
> + }
> Error in `[[.data.frame`(old, , 22) :
>  argument "..1" is missing, with no default
>
> I just want to ignore the IDs in the old data set that aren't in the  
> new
> data set. How do I do this?

Actually you are not 'ignoring' the ID's in new-data,  but rather  
using them to set the value columns to missing in certain rows.  
Perhaps, (untested)

oldnew <- old[ c( "group", , "ID", column-vector for desired values ]
oldnew[ !paste(old$ID, old$group, sep="_") %in% paste(new$ID, new 
$group, sep="_") ,
          ####  names of columns here as a character vector or  
3:length(oldnew)
                ] <- NA

-- 

David Winsemius, MD
Alameda, CA, USA




More information about the R-help mailing list