Hi Laura, On Thu, Aug 11, 2011 at 7:01 AM, Lali <laur...@gmail.com> wrote: > Hi everyone, > I have a data frame that looks *sort of* like this: > > name <- letters[1:5] > signal.1 <- c("12", "bad signal", "noise", "10", "X") > length.signal.1 <- 5:9 > intensity.signal.1 <- 3:7 > signal.2 <- c("13", "noise", "19.2", "X", "V") > length.signal.2 <- 2:6 > intensity.signal.2 <- 1:5 > signal.3 <- c("NA", "15.4", "error", "NA", "17") > length.signal.3 <- c("NA", 2, 3, "NA", 4) > intensity.signal.3 <- c("NA",4, 5, "NA", 5) > > #(there are actually up to 16 signals and 50 names, but I made this short > for the example) > > df <- data.frame(cbind(name, signal.1, length.signal.1, intensity.signal.1, > signal.2, > length.signal.2, intensity.signal.2, signal.3, > length.signal.3, > intensity.signal.3)) > > > > I need to "fish out" some values and have them in a new data frame. > > I am only interested in values in columns 2, 5 and 8 (actually seq(2, 50, 3) > in my real df) > I want the values that are not: > "bad signal" > "noise" > "error" > "NA" > "V" > > This is the output I want (the name column is unimportant for my purposes, > its just there as a reference for the example). > > (name) S1 S2 > A 12 13 > B 15.4 (another value found in the other signals >3 not shown on > example) > C 19.2 (another value found in the other signals >3 not shown on > example) > D 10 X > E X 17 > > I do know that there will always be 2 values exactly that do not match the > exclusions named above, or none at all > > I have tried different approaches, grep, matching,%nin%... But as I am not > an advanced used, I am very likely doing something wrong, because I either > get a vector, or I get a matrix with TRUE FALSE, and usually I get the whole > rows, and I don't want that :( > I have also being searching the list for answers without avail. > Any suggestions? Examples including syntax are appreciated (syntax is a > major weak point for me).
Here is a solution using the reshape and plyr packages library(reshape) dfm <- melt(df[c(1, 2, 5, 8)], id = 1) dfm.r <- dfm[!dfm$value %in% c("bad signal", "noise", "error", "NA", "V"), ] dfm.r <- ddply(dfm.r, .(name), transform, index = paste("S", 1:length(name), sep = "")) cast(dfm.r, name ~ index) Best, Ista > > > Laura > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@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 ______________________________________________ R-help@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.