seq_along 给出列号而不是行号

问题描述 投票:0回答:2

我正在尝试编写一个 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
)行为不正确的原因是什么我早就预料到了。

r seq
2个回答
5
投票

将评论形式化为社区答案,

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

0
投票

相反,您可以使用:

mtcars %>% mutate(ID = row_number()) 

结果将如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.