Создайте новую строку в нижней части фрейма данных и добавьте суммы столбцов - PullRequest
4 голосов
/ 30 марта 2012

Я читаю CSV-файл из рабочего каталога со следующим кодом:

df <- read.csv("test1.csv", header = TRUE,skip =6, nrow =
length(count.fields("test1.csv")) - 12)

, затем меняю имена столбцов следующим кодом:

colnames(df) = c("type","date","v1","v2","v3","v4","v5","v6","v7","v8","v9","v10","v11","v12","v13","v14","v15","v16","v17","v18","v19","v20","v21","v22","v23","v24","total")

измерение моего набора данных365 строк x 24 столбца, и я пытаюсь вычислить суммы столбцов (3:27) и создать новую строку в нижней части кадра данных с суммами.

data.frame выглядит следующим образом:

enter image description here

Если я попробую выполнить тест с некоторыми образцами данных, как показано ниже, то все будет работать нормально:

x <- data.frame(x1 = c(3:8, 1:2), x2 = c(4:1, 2:5),x3 = c(3:8, 1:2), x4 = c(4:1, 2:5))

x [9, (2: 3)] <- применить(x, 2, sum) </p>

но когда я пытаюсь в csv-файле, с которым я работаю, код, который я использую, выглядит следующим образом:

x[366,(3:27)] <- apply(df, 2, sum)

, но выдает ошибкукак это: «Ошибка в FUN (newX [, i], ...): недопустимый тип (символ) аргумента»

Может кто-нибудь посоветовать мне, как решить эту проблему?

1 Ответ

5 голосов
/ 30 марта 2012

apply(df, 2, sum) попытается суммировать все столбцы, и если столбцы type и date относятся к типу, для которого R не имеет метода sum, это не удастся. Вы можете попробовать

df[366,(3:27)] <- colSums(df[,3:27], na.rm=TRUE)

EDIT

Чтобы определить числовые столбцы:

myNumCols <- which(unlist(lapply(df, is.numeric)))

А потом

df[(nrow(df) + 1), myNumCols] <- colSums(df[, myNumCols], na.rm=TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...