<NA>
указывает на символьные данные, где необходимо число c; transform!
dat[3:5] <- lapply(dat[3:5], as.numeric)
Теперь NA
in rowSums
удаляет строки NA
.
res <- dat[!is.na(rowSums(dat[3:5])), ]
и восстанавливает первые два столбца, используя paste
.
res <- dat[!is.na(rowSums(dat[3:5])), ]
res <- transform(res,
V1=paste0(rownames(res), "name"),
V2=paste0(rownames(res), "Class"))
Результат
res
# V1 V2 V3 V4 V5
# row1 row1name row1Class 1 2 3
# row2 row2name row2Class 4 3 8
# row3 row3name row3Class 12 6 3
# row4 row4name row4Class 3 7 5
Данные
dat <- structure(list(V1 = c("", "Row1name", "", "row2name", "row3name",
"row4name"), V2 = c("", "row1class", "", "row2class", "row3class",
"row4class"), V3 = c("1", "4", "12", "3", "<NA>", "<NA>"), V4 = c("2",
"3", "6", "7", "<NA>", "<NA>"), V5 = c("3", "8", "3", "5", "<NA>",
"<NA>")), row.names = c("row1", "row2", "row3", "row4", "row5",
"row6"), class = "data.frame")