seq_along给出列号而不是行号

时间:2019-05-23 15:39:37

标签: r seq

我正在尝试编写一个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_along(和seq的原因是什么,并且length)的行为不符合我的预期。

1 个答案:

答案 0 :(得分:2)

将评论形式化为社区答案,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