Hi,
Try:
library(stringr)
res <-
transform(dat[rep(1:nrow(dat),str_count(dat$Result,"-")+1),],Result=unlist(strsplit(as.character(dat$Result),"
- ")),Batch=ave(Batch,Batch,FUN=function(x)
paste0(x,letters[seq_along(x)])))
?row.names(res) <- 1:nrow(res)
# Based on the expected results, it could be also:
res1 <-?
transform(dat[rep(1:nrow(dat),str_count(dat$Result,"-")+1),],Result=unlist(strsplit(as.character(dat$Result),"
- ")),Batch=ave(Batch,Batch,Test,FUN=function(x)
paste0(x,letters[seq_along(x)])))
?row.names(res1) <- 1:nrow(res1)
A.K.
Hi,
I have a dataframe with some data from experiments:
Batch ? Test ?Result ? ? ? ?LL ? ? ? ?......(many more columns, all the same
within Batch/Test)
? 1 ? ? ? ? A ? ? 6,5-6,7 ? ? 6,00 ? ?.....
? 1 ? ? ? ? B ? ? 95,1-95,3 ?95,00 ?.....
? 2 ? ? ? ? A ? ? 6,5-6,7 ? ? 6,00 ? ?.....
...
Some results have double values, instead of 1 single numeric value, all
separated by "-".
But now I want a dataframe with only 1 value per Batch/Test, and batches with
double values should be renamed to 1a, 1b, ...
So
Batch ? Test ?Result ? ? ? ?LL ? ? ? ?......(many more columns, all the same
within Batch/Test)
? 1a ? ? ? ?A ? ? 6,5
? 1b ? ? ? ?A ? ? 6,7 ? ? 6,00 ? ?.....
? 1a ? ? ? ?B ? ? 95,1 ?95,00 ?.....
? 1b ? ? ? ?B ? ? 95,3 ?95,00 ?.....
? 2a ? ? ? ?A ? ? 6,5 ? ? 6,00 ? ?.....
? 2b ? ? ? ?A ? ? 6,7 ? ? 6,00 ? ?.....
...
I tried with by and strsplit, but couldn't figure it out.
Any help would be appreciated, example data below.
Bart
dat <-
structure(list(Batch = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 4L,
4L, 4L, 4L), Test = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
1L, 2L, 2L, 2L), .Label = c("A", "B"), class =
"factor"), Result = structure(c(12L,
4L, 8L, 6L, 11L, 5L, 10L, 2L, 9L, 3L, 1L, 7L), .Label = c("6,604 - 6,59 -
6,585 - 6,588",
"6,61", "6,625 - 6,607", "6,675", "6,71 -
6,74", "6,76 - 6,75",
"6,79 - 6,80", "98,28 - 99,14", "98,52",
"99,05 - 99,15", "99,74 - 98,19",
"99,77 - 99,62"), class = "factor"), X = c(NA, NA, NA, NA,
NA,
NA, NA, NA, NA, NA, NA, NA), LL = structure(c(2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L), .Label = c("6,00", "95"),
class = "factor")), .Names = c("Batch",
"Test", "Result", "X", "LL"), class =
"data.frame", row.names = c(NA,
-12L))