Во-первых, давайте немного изменим ваши данные.
mat1 <- data.frame(V1 = c("D-J10-N1","D-J10-N2","D-J2-N1","D-J2-N2"),
V2 = c(3,6,5,7),
V3 = c(8,4,2,3),
V4 = c(4,1,2,3))
Если вы посмотрите на str
ваших исходных данных, все они будут символами. Именно поэтому rowums erros.
Использование strsplit
и lapply
позволяет начать работу:
mat1$new.V1 <- unlist(lapply(strsplit(mat1$V1, '-'), '[', 2))
Однако, в зависимости от данных в первом столбце, вы можете использовать gsub и регулярное выражение:
gsub('.+-([0-z]+)-.+','\\1',mat1$V1)
или что-то в этом роде ...
Тогда я бы посмотрел на пакет plyr
.
ddply(mat1, .(new.V1), summarise, sums = sum(V2, V3, V4))
Или как уродливый путник:
ddply(mat1, .(unlist(lapply(strsplit(mat1$V1, '-'), '[', 2))), summarise, sum(V2, V3, V4))