gpt4 book ai didi

将值替换为每列的众数

转载 作者:行者123 更新时间:2023-12-04 21:54:42 25 4
gpt4 key购买 nike

大家好,我正在处理一个非常大的数据集(200 列,750,000 行)。有一些单元格的值为 -1,我想根据该特定列的模式(最高重复值)替换每个单元格,而不仅仅是所有 -1 的一个标准值。例如,A 列中的 -1 替换为 A 列中的模式,B 列中的 -1 替换为 B 列中的模式。

有没有办法解决这个问题,而不必使用 if 函数创建新的 200 列和 750,000 行?

感谢您的宝贵时间。

问候,字里行间

最佳答案

我们可以使用Mode函数来自 here

Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}

然后,用mutate_all replace -1 的值与每列的“模式”

library(dplyr)
df1 %>%
mutate_all(funs(replace(., .== -1, Mode(.))))

尚不清楚 -1 是否作为列中出现频率最高的值。排除 mutate_all 中的那个

df1 %>%
mutate_all(funs(replace(., .== -1, Mode(.[. != -1]))))
<小时/>

此外,如果有没有-1的列,那么我们可以使用mutate_if跳过这些

df1 %>%
mutate_if(funs(any(.==-1)),funs(replace(., .== -1, Mode(.[. != -1]))))

数据

df1 <- structure(list(V1 = c(1L, 0L, 3L, 2L, 3L, 5L, 0L, 4L, 4L, 0L), 
V2 = c(3L, 1L, 3L, 3L, 1L, 5L, 0L, -1L, 2L, -1L), V3 = c(-1L,
2L, 4L, -1L, 0L, 3L, -1L, 3L, 3L, -1L), V4 = c(1L, 0L, 1L,
0L, 5L, 0L, 4L, 3L, 3L, 5L), V5 = c(2L, 1L, 0L, 0L, -1L,
-1L, 1L, 1L, 0L, 1L)), .Names = c("V1", "V2", "V3", "V4",
"V5"), row.names = c(NA, -10L), class = "data.frame")

关于将值替换为每列的众数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240160/

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