我正在尝试编写一个 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(andseq和length) 的行为不符合我预期的原因是什么。
将评论形式化为社区答案,seq_along(aDataFrame)沿着数据框架中的列进行排序,因为数据框架也是list(). typeof()我们可以通过 Motor Trend Cars 数据框的函数来演示这一点。
> typeof(mtcars)
[1] "list"
Run Code Online (Sandbox Code Playgroud)
列表中的每个元素都包含数据框中的一列。我们可以使用该names()函数从列表中提取元素名称。
> names(mtcars)
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
Run Code Online (Sandbox Code Playgroud)
因此,seq_along(mtcars)将产生一个 1:11 的向量,对应于 中的元素数量list()。
> seq_along(mtcars)
[1] 1 2 3 4 5 6 7 8 9 10 11
Run Code Online (Sandbox Code Playgroud)