seq_along дает номер столбца, а не номер строки - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь написать цикл for, который создает новую переменную из существующей переменной в кадре данных, и делает это путем итерации по каждой строке по очереди.Я попытался использовать for (i in seq_along(data)), но это только правильно создало новую переменную для первых 19 строк, и я понял, что seq_along работает не так, как я ожидал: вместо создания последовательности, основанной на количестве строк, это было сделано исходя из количества столбцов:

seq_along(data) возвращает

[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

, а nrow(data) возвращает

[1] 82

и ncol(data) возвращает

[1] 19

Кроме того, выходные данные для seq(data) такие же, как для seq_along, а length(data) возвращаются[1] 19.

Хотя у меня есть обходной путь, который решает проблему для цикла for (for (i in 1:nrow(data))), мне любопытно узнать, в чем причина seq_alongseqи length) не ведет себя так, как я ожидал.

1 Ответ

2 голосов
/ 24 мая 2019

Формализуя комментарии в ответ сообщества, seq_along(aDataFrame) располагается вдоль столбцов во фрейме данных, потому что фрейм данных также является list().Мы можем продемонстрировать это с помощью функции typeof() следующим образом с фреймом данных Motor Trend Cars.

> typeof(mtcars)
[1] "list"

Каждый элемент в списке содержит один столбец из фрейма данных.Мы можем использовать функцию names() для извлечения имен элементов из списка.

> names(mtcars)
[1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

Следовательно, seq_along(mtcars) создаст вектор 1:11, соответствующий количеству элементов в list().

> seq_along(mtcars)
 [1]  1  2  3  4  5  6  7  8  9 10 11
...