Создание столбцов на основе общего количества столбцов в кадре данных R - PullRequest
0 голосов
/ 13 декабря 2018

Я должен импортировать документ Excel каждый месяц, содержащий данные от агентств по месяцам в широком формате.Данные выглядят так:

+---------+--------+--------+--------+
|Agency   | Jan-18 | Feb-18 | Mar-18 |
+---------+--------+--------+--------+
| Agency1 |  1,996 |  2,042 |  2,045 |
| Agency2 |    609 |    701 |    611 |
| Agency3 |  1,119 |  1,176 |  1,158 |
+---------+--------+--------+--------+

Я хотел бы иметь 13 столбцов в моем фрейме данных;одна на объекте кариозная плюс 12 месяцев.В этом случае я хотел бы создать еще 9 столбцов.Что-то вроде «если ncol (df) <13 (учитывая первую переменную), то создать столбцы 13-ncol (df)».Мне нужно сделать это, потому что я хочу переименовать все столбцы одновременно и потому что я не хочу делать это вручную в зависимости от количества столбцов разных наборов данных (в зависимости от месяца).</p>

colnames(df)[1:13] <- c("Fac", "m.Jan", "m.Feb", "m.Mar", "m.Apr", "m.May", "m.Jun",
                         "m.Jul", "m.Aug","m.Sep", "m.Oct", "m.Nov", "m.Dec") 

Буду признателен за любую помощь!Заранее спасибо!

1 Ответ

0 голосов
/ 13 декабря 2018

Возможное, быстрое решение будет примерно таким:После указания рабочего каталога вы читаете данные

data <- read.csv("filename.csv")

, а затем используете оператор if , чтобы проверить, имеет ли ваш набор данных менее 13 столбцов

if (ncol(data) < 13) {
new_df <- as.data.frame( matrix(NA, nrow = nrow(data), ncol = 13 - ncol(data)) )
df <- cbind(data, new_df)
}

В основном здесь я создаю матрицу, полную NA , которая имеет то же количество строк, что и data , а оставшееся количество столбцов так, что конечный кадр данных df имеет 13 столбцов.

В конце вы переименовываете имена переменных по своему желанию:

colnames(df) <- c("Fac", "m.Jan", "m.Feb", "m.Mar", "m.Apr", "m.May", "m.Jun",
                    "m.Jul", "m.Aug","m.Sep", "m.Oct", "m.Nov", "m.Dec")

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...