我有一段代码,如下所示:
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 很陌生,对编码也比较陌生。谢谢。
问题在于
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