如果在 r 中使用行名,则不将行号视为整数

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

我有一段代码,如下所示:

ParticipantNum <- c(1,2,4,5,7,8,9,10,13,15,16,17,18,22,24,26,27,28,29,30,32,33,35,36,39,41,43,44,45,49,50,53,54)
ParticipantTime <- c(55,54,56,88,54,79,64,52,48,21,54,87,62,35,54,87,96,96,87,53,54,52,32,89,11,28,47,78,22,14,49,75,45)
summary <- data.frame(Number=ParticipantNum,Time=ParticipantTime,Category='')
summary$Category <- ifelse(row.names(summary)<=3,"Dogs","Cats")

我正在设置一个包含 3 列的数据框:数字、时间和类别,其中类别是狗和猫。我希望我的数据框使第 1-3 行显示“狗”,所有其他行显示“猫”。 (为了清楚起见,这是一个示例)。不知何故,当我这样做时,第 1-3 行会显示“狗”,第 10-29 行也会显示为“狗”。第 4-9 行和第 30-33 行(最后一行)表示“猫”。我的直觉是,它将第 10-29 行视为“小于 3”,因为行名称的第一个字符小于 3。我不知道为什么会这样做。我已经阅读了 rownames 和 row.names 的文档,但我不太理解它来解决我的问题。我对 r 很陌生,对编码也比较陌生。谢谢。

在此输入图片描述

r dataframe r-rownames
1个回答
0
投票

问题在于

row.names
的工作原理。如果你看一下文档,它很微妙,但说:

n > 2 时形式为 1:n 的行名称以紧凑形式存储在内部,这可以从 C 代码或通过解析看到,但绝不能通过 row.names 或 attr(x, "row.names") 看到。

对于数字运算:

row.names 将始终返回一个字符向量。 (如果需要检索整数值的行名称集,请使用 attr(x, "row.names")。)

因此,如果您使用

attr(summary, "row.names")
,您的代码将会工作,但使用
as.numeric
可能看起来更好。

ParticipantNum <- c(1, 2, 4, 5, 7, 8, 9, 10, 13, 15, 16, 17, 18, 22, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 39, 41, 43, 44, 45, 49, 50, 53, 54)
ParticipantTime <- c(55, 54, 56, 88, 54, 79, 64, 52, 48, 21, 54, 87, 62, 35, 54, 87, 96, 96, 87, 53, 54, 52, 32, 89, 11, 28, 47, 78, 22, 14, 49, 75, 45)
summary <- data.frame(Number = ParticipantNum, Time = ParticipantTime, Category = "")
# summary$Category <- ifelse(attr(summary, "row.names") <= 3, "Dogs", "Cats")
summary$Category <- ifelse(as.numeric(row.names(summary)) <= 3, "Dogs", "Cats")
summary
#>    Number Time Category
#> 1       1   55     Dogs
#> 2       2   54     Dogs
#> 3       4   56     Dogs
#> 4       5   88     Cats
#> 5       7   54     Cats
#> 6       8   79     Cats
#> 7       9   64     Cats
#> 8      10   52     Cats
#> 9      13   48     Cats
#> 10     15   21     Cats
#> 11     16   54     Cats
#> 12     17   87     Cats
#> 13     18   62     Cats
#> 14     22   35     Cats
#> 15     24   54     Cats
#> 16     26   87     Cats
#> 17     27   96     Cats
#> 18     28   96     Cats
#> 19     29   87     Cats
#> 20     30   53     Cats
#> 21     32   54     Cats
#> 22     33   52     Cats
#> 23     35   32     Cats
#> 24     36   89     Cats
#> 25     39   11     Cats
#> 26     41   28     Cats
#> 27     43   47     Cats
#> 28     44   78     Cats
#> 29     45   22     Cats
#> 30     49   14     Cats
#> 31     50   49     Cats
#> 32     53   75     Cats
#> 33     54   45     Cats

创建于 2024 年 11 月 4 日,使用 reprex v2.1.1.9000

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