Hi, I'm requesting you don't berate me for asking this question: I clearly don't have the gist of factors. I have two dataframes, A and B. Each of them has a column containing strings (they're labels). I want to, one-by-one in a loop, compare the particular string in an entry from dataframe A to an entry in B, to see if they're the same. The problem, when posing the question: searchID1 <- A[['label']][i] possMatch1 <- B[['label']][j] searchID1 == possMatch1 I get the error: Error in Ops.factor(searchID1, possMatch1) : level sets of factors are different I presume this is because the set of possible values in the 'labels' columns, respectively in A and B, differ. In my case, I'm not interested in this at all; I just want to compare individual entries from the two dataframes in a pair-wise fashion. Can I strip the "factors" associated with the entries? Is there a better way? Jonathan [[alternative HTML version deleted]]
On May 5, 2011, at 6:28 PM, J wrote:> Hi, I'm requesting you don't berate me for asking this question: > > I clearly don't have the gist of factors. > > I have two dataframes, A and B. > > Each of them has a column containing strings (they're labels). > > I want to, one-by-one in a loop, compare the particular string in an > entry from dataframe A to an entry in B, to see if they're the same. > > The problem, when posing the question: > searchID1 <- A[['label']][i] > possMatch1 <- B[['label']][j] > searchID1 == possMatch1 > > I get the error: > Error in Ops.factor(searchID1, possMatch1) : > level sets of factors are different > > I presume this is because the set of possible values in the 'labels' > columns, respectively in A and B, differ. In my case, I'm not > interested in this at all; I just want to compare individual entries > from the two dataframes in a pair-wise fashion. > > Can I strip the "factors" associated with the entries? Is there a > better way?Use as.character around the factors. Assuming they have equal nummbers of rows, then no loop is needed: searchID1 <- as.character(A[['label']]) possMatch1 <- as.character(B[['label']]) searchID1 == possMatch1 # returns pair-wise logical vector And if the number of rows are not equal, then you need to express your problem more clearly (and the dyadic function %in% is probably neededt) -- David Winsemius, MD West Hartford, CT
Hi Jonathan, On Thu, May 5, 2011 at 6:28 PM, J <jonsleepy at gmail.com> wrote:> Hi, I'm requesting you don't berate me for asking this question: > > I clearly don't have the gist of factors. > > I have two dataframes, A and B. > > Each of them has a column containing strings (they're labels). > > I want to, one-by-one in a loop, compare the particular string in an entry from dataframe A to an entry in B, to see if they're the same.This is probably not the best way. Much easier to compare them all in one go.> > The problem, when posing the question: > searchID1 <- A[['label']][i] > possMatch1 <- B[['label']][j] > searchID1 == possMatch1 > > I get the error: > Error in Ops.factor(searchID1, possMatch1) : > ?level sets of factors are different > > I presume this is because the set of possible values in the 'labels' columns, respectively in A and B, differ. ?In my case, I'm not interested in this at all; I just want to compare individual entries from the two dataframes in a pair-wise fashion. > > Can I strip the "factors" associated with the entries? ?Is there a better way?Yes, you can "strip the factors" using as.character(). Alternatively, you could use set the factor levels using factor() or levels. Either way, I would just do A$label == B$label Instead of a loop. Best, Ista> > Jonathan > > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Ista Zahn Graduate student University of Rochester Department of Clinical and Social Psychology http://yourpsyche.org
On Thu, May 5, 2011 at 6:28 PM, J <jonsleepy at gmail.com> wrote:> Hi, I'm requesting you don't berate me for asking this question: > > I clearly don't have the gist of factors. > > I have two dataframes, A and B. > > Each of them has a column containing strings (they're labels). > > I want to, one-by-one in a loop, compare the particular string in an entry from dataframe A to an entry in B, to see if they're the same. > > The problem, when posing the question: > searchID1 <- A[['label']][i] > possMatch1 <- B[['label']][j] > searchID1 == possMatch1 > > I get the error: > Error in Ops.factor(searchID1, possMatch1) : > ?level sets of factors are different > > I presume this is because the set of possible values in the 'labels' columns, respectively in A and B, differ. ?In my case, I'm not interested in this at all; I just want to compare individual entries from the two dataframes in a pair-wise fashion. > > Can I strip the "factors" associated with the entries? ?Is there a better way? >Assuming you read them in using read.table, use read.table(...whatever..., as.is = TRUE) and then it will read them as character strings rather than factors. -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com