我正在尝试编写一个 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
)行为不正确的原因是什么我早就预料到了。
将评论形式化为社区答案,
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