我正在尝试编写一个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
)的行为不符合我的预期。
答案 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