gpt4 book ai didi

重命名数据框中的几列: Why doesn't ifelse with %in% operator preserve order?

转载 作者:行者123 更新时间:2023-12-01 16:20:05 25 4
gpt4 key购买 nike

这是引用this question

我想重命名大型数据框中的列子集。我希望以下代码将列 X4X5X6X7 重命名为 gradek分别为 grade1grade2grade3:

set.seed(1)
in.df <- data.frame( matrix( rnorm(60), ncol=10) )
names(in.df) <- ifelse( names(in.df) %in% c('X4', 'X5', 'X6', 'X7'),
paste('grade', c('k',1:3), sep=''),
names(in.df) )

但是,

> names(in.df)
[1] "X1" "X2" "X3" "grade3" "gradek" "grade1" "grade2" "X8"
[9] "X9" "X10"

尽管

> paste('grade', c('k',1:3), sep='')
[1] "gradek" "grade1" "grade2" "grade3"

显示订单未保留。 This thread ,建议使用 match 而不是 %in% 可以工作,但在这种情况下不行。 (也许在其他版本的 R 中也是如此。在我安装的版本(2.15.3)中,match 上的帮助页面表明 %in% 是通过 定义的>match 所以切换它是没有帮助的。)

如有任何帮助,我们将不胜感激!

已接受的答案 This answer解决了我的重命名问题。 This answer解释说这种奇怪的行为是由于回收造成的。

最佳答案

%in% 应该可以,但也许 match 更好。

请考虑以下事项。 “A”和“B”代表您的姓名(in.df)。我们希望使用 paste('grade', c('k',1:3), sep='')< 的结果按该顺序替换“matchme”中的值.

比较不同的输出:

A <- B <- c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10")
matchme <- c('X4', 'X7', 'X6', 'X5')
A[A %in% matchme] <- paste('grade', c('k',1:3), sep='')
A
# [1] "X1" "X2" "X3" "gradek" "grade1" "grade2" "grade3" "X8"
# [9] "X9" "X10"
B[match(matchme, B)] <- paste('grade', c('k',1:3), sep='')
B
# [1] "X1" "X2" "X3" "gradek" "grade3" "grade2" "grade1" "X8"
# [9] "X9" "X10"

关于重命名数据框中的几列: Why doesn't ifelse with %in% operator preserve order?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com