gpt4 book ai didi

R删除数据框中的重复条目并保留具有较少NA和零的行

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

我想对从另一个生成的 data.frame 进行重复数据删除我的代码库的一部分无法知道列和行。 data.frame 有一些我想比较的列对于复制,此处为 AB,但我想选择那些在其他行中包含较少 NA 和零的行数据框中的列,此处为 CDE

tc=
'Id B A C D E
1 62 12 0 NA NA
2 12 62 1 1 1
3 2 62 1 1 1
4 62 12 1 1 1
5 55 23 0 0 0 '

df =read.table(textConnection(tc),header=T)

我可以使用duplicated,但是因为我无法控制我的数据框所在的列和行,我需要一种方法来获取具有较少 NA 和零的唯一值。

这将在示例中起作用,但如果传入的 data.frame 则不起作用有不同的顺序:

df[!duplicated(data.frame(A=df$A,B=df$B),fromLast=TRUE),]
Id B A C D E
2 2 12 62 1 1 1
3 3 2 62 1 1 1
4 4 62 12 1 1 1
5 5 55 23 0 0 0

有什么想法吗?

最佳答案

这是一种基于对有效值进行计数并对数据框重新排序的方法。

首先,统计 CD 列中的 NA0 >E.

rs <- rowSums(is.na(df[c("C", "D", "E")]) | !df[c("C", "D", "E")])
# [1] 3 0 0 0 3

其次,按AB和新变量对数据框进行排序:

df_ordered <- df[order(df$A, df$B, rs), ]
# Id B A C D E
# 4 4 62 12 1 1 1
# 1 1 62 12 0 NA NA
# 5 5 55 23 0 0 0
# 3 3 2 62 1 1 1
# 2 2 12 62 1 1 1

现在,您可以删除重复的行并保留有效值数量最多的行。

df_ordered[!duplicated(df_ordered[c("A", "B")]), ]
# Id B A C D E
# 2 2 12 62 1 1 1
# 3 3 2 62 1 1 1
# 4 4 62 12 1 1 1
# 5 5 55 23 0 0 0

关于R删除数据框中的重复条目并保留具有较少NA和零的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26118101/

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