gpt4 book ai didi

R - 需要添加一个标志,其中代码标识列中的缺失值

转载 作者:行者123 更新时间:2023-12-01 09:55:44 25 4
gpt4 key购买 nike

不确定标题是否清楚,但我想添加一个列来标识组,其中名称列中的名称值可能在该组中丢失。示例数据...

 Group ID  Ind ID  Name
100 1 Andy
100 1 Mike
100 2 Mike
200 1 Mike
200 2 Mike
300 1 Andy
300 1 Mike
400 1 Mike
400 2 Mike
400 3 Mike
400 4 Mike

我想添加第四列,该列将标记“Andy”是否根本不在组中。所以……

 Group ID  Ind ID  Name  Andy?
100 1 Andy Y
100 1 Mike Y
100 2 Mike Y
200 1 Mike N
200 2 Mike N
300 1 Andy Y
300 2 Mike Y
400 1 Mike N
400 2 Mike N
400 3 Mike N
400 4 Mike N

我最初的想法是对数据进行分区,然后循环查找“名称”列中是否提到了我要标记的名称。

我对分区使用了 split() - 5 分钟后,它还在继续。我确实有 600,000 多行,其中可能有 500,000 行作为唯一组 ID。

关于如何处理有什么建议吗?

最佳答案

您可以使用数据表和any(),使用GroupID 作为分组变量。

library(data.table)
setDT(df)[, "Andy?" := any(Name == "Andy"), by = GroupID]

给出

 #     GroupID IndID Name Andy?
# 1: 100 1 Andy TRUE
# 2: 100 1 Mike TRUE
# 3: 100 2 Mike TRUE
# 4: 200 1 Mike FALSE
# 5: 200 2 Mike FALSE
# 6: 300 1 Andy TRUE
# 7: 300 1 Mike TRUE
# 8: 400 1 Mike FALSE
# 9: 400 2 Mike FALSE
# 10: 400 3 Mike FALSE
# 11: 400 4 Mike FALSE

或者,对于 Andy? 列中的 YN,您可以使用

setDT(df)[, "Andy?" := ifelse(any(Name == "Andy"), "Y", "N"), by = GroupID]

基本的 R 方法是使用 ave() 虽然这看起来不太理想,因为它使用 data.table 是多么简单和高效>dplyr.

df[["Andy?"]] <- with(df, {
ave(as.character(Name), GroupID, FUN = function(x) {
ifelse(any(x == "Andy"), "Y", "N")
})
})

关于R - 需要添加一个标志,其中代码标识列中的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28181559/

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