gpt4 book ai didi

唯一值上的 R ifelse 循环总是解析为 FALSE

转载 作者:行者123 更新时间:2023-12-02 01:12:11 24 4
gpt4 key购买 nike

我是 R 的新手,在处理唯一值的 for 循环时遇到了麻烦。

与 df:

id = c(1,2,2,3,3,4) 
rank = c(1,2,1,3,3,4)
df = data.frame(id, rank)

我跑:

df$dg <- logical(6)

for(i in unique(df$id)){
ifelse(!unique(df$rank), df$dg ==T, df$dg == F)
}

我试图将 $dg 变量标记为 T,前提是每个唯一 ID 的排名不同,如果每个 ID 内的排名相同,则标记为 F。

我没有收到任何错误,但是对于 $dg 的所有值我只得到 F,即使我应该混合。

我还使用了以下循环,结果相同:

for(i in unique(df$id)){
ifelse(length(unique(df$rank)), df$dg ==T, df$dg == F)
}

我读过其他类似的帖子,但这些建议对我的情况不起作用。

来自评论:

如果给定 id 的排名完全改变,我想为 id 的所有实例标记 dg TRUE。我想说的是,对于具有 1-13 个实例之间任何位置的给定 ID,如果实例之间的排名不同,则将 dg 标记为 TRUE。

最佳答案


更新:如何识别只有一个排名的组(id)?


在澄清 OP 提供的这将是针对这种特殊情况的解决方案之后:

library(dplyr)
df %>%
group_by(id) %>%
mutate(dg = ifelse( length(unique(rank))>1 | n() == 1, T, F))

对于另一个也有 id 的数据集,它有重复但也有非重复的排名(如下所示),这将是输出:

df2 %>% 
group_by(id) %>%
mutate(dg = ifelse( length(unique(rank))>1 | n() == 1, T, F))

#:OUTPUT:

# Source: local data frame [9 x 3]
# Groups: id [5]
#
# # A tibble: 9 x 3
# id rank dg
# <dbl> <dbl> <lgl>
# 1 1 1 TRUE
# 2 2 2 TRUE
# 3 2 1 TRUE
# 4 3 3 FALSE
# 5 3 3 FALSE
# 6 4 4 TRUE
# 7 5 1 TRUE
# 8 5 1 TRUE
# 9 5 3 TRUE

数据 2:

df2 <- structure(list(id = c(1, 2, 2, 3, 3, 4, 5, 5, 5), rank = c(1, 2, 1, 3, 3, 4, 1, 1, 3
)), .Names = c("id", "rank"), row.names = c(NA, -9L), class = "data.frame")



如何识别每个组(id)中的重复行?


您可以使用dplyr:

library(dplyr)
df %>%
group_by(id, rank) %>%
mutate(dg = ifelse(n() > 1, F,T))

这会给你:

# Source: local data frame [6 x 3] 
# Groups: id, rank [5]
#
# # A tibble: 6 x 3
# id rank dg
# <dbl> <dbl> <lgl>
# 1 1 1 TRUE
# 2 2 2 TRUE
# 3 2 1 TRUE
# 4 3 3 FALSE
# 5 3 3 FALSE
# 6 4 4 TRUE

注意:您可以简单地将其转换回 data.frame()

data.table 解决方案将是:

dt <- data.table(df)
dt$dg <- ifelse(dt[ , dg := .N, by = list(id, rank)]$dg>1,F,T)

数据:

df <- structure(list(id = c(1, 2, 2, 3, 3, 4), rank = c(1, 2, 1, 3, 
3, 4)), .Names = c("id", "rank"), row.names = c(NA, -6L), class = "data.frame")

# > df

# id rank
# 1 1 1
# 2 2 2
# 3 2 1
# 4 3 3
# 5 3 3
# 6 4 4

N. B. 除非您想要一个不同的标识符而不是 TRUE/FALSE,否则使用 ifelse() 是多余的并且会增加计算成本。 @DavidArenburg

关于唯一值上的 R ifelse 循环总是解析为 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789473/

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