gpt4 book ai didi

r - 为什么在 ave() 中使用 `==` 类整数的结果?

转载 作者:行者123 更新时间:2023-12-04 11:29:37 27 4
gpt4 key购买 nike

这篇文章是基于这个问题:Running ifelse statement by a variable

给定一些数据

  col1 col2
1 B 10
2 B 7
3 C 7
4 D 1
5 A 3
6 D 2

我们要向其中添加一个新列,指示“col2”的值是否是按“col1”分组的“col2”的最大值。

base R 中,可以使用 transformave

transform(df, new_col = ave(col2, col1, FUN = function(x) x == max(x)))
col1 col2 new_col
1 B 10 1
2 B 7 0
3 C 7 1
4 D 1 0
5 A 3 1
6 D 2 1

我的问题是为什么“new_col”是整数类型而不是逻辑类型?

@RichScriven 在评论中指出,那是因为“col2”已经是数字,但我不明白这一点。

谢谢!

数据

df <- structure(list(col1 = c("B", "B", "C", "D", "A", "D"), col2 = c(10L, 
7L, 7L, 1L, 3L, 2L)), .Names = c("col1", "col2"), row.names = c(NA,
-6L), class = "data.frame")

最佳答案

ave 将返回一个与 x 相同类的对象,如果它可以被强制转换的话

with(df, ave(col2, col1, FUN = function(x) T))
# [1] 1 1 1 1 1 1
with(df, ave(col2, col1, FUN = function(x) 'a'))
# [1] "a" "a" "a" "a" "a" "a"

df$col2 <- as.logical(df$col2)
with(df, ave(col2, col1, FUN = function(x) T))
# [1] TRUE TRUE TRUE TRUE TRUE TRUE



df$col2 <- as.factor(df$col2)
with(df, ave(col2, col1, FUN = function(x) T))
# [1] TRUE TRUE TRUE TRUE TRUE TRUE
# Levels: TRUE

编辑:它似乎会强制转换为“更高”级别而不是“更低”级别。其中“更高”和“更低”由 ?c(下文)中给出的顺序决定。

df$col2 <- as.logical(df$col2)
with(df, ave(col2, col1, FUN = function(x) 1))
# [1] 1 1 1 1 1 1

NULL < raw < logical < integer < double < complex < character < list < expression

关于r - 为什么在 ave() 中使用 `==` 类整数的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50991456/

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