gpt4 book ai didi

重写 data.frame 并用第二个 data.frame 中最接近的值替换值

转载 作者:行者123 更新时间:2023-12-01 13:19:10 27 4
gpt4 key购买 nike

我有一个 data.frame ( df.x ),它由 1000 行和 10 列组成。最后一列是每行的类别/标签(即 df.x$lbl )。

df.x <- data.frame(replicate(9,sample(0:100,1000,rep=TRUE)))
df.x$lbl <- (replicate(1,sample(0:15,1000,rep=TRUE)))

然后我将此 data.frame 聚合到基于 ( df.x.agg ) 的“lbl”列。现在我有两个 data.frames:

df.x.agg <- aggregate(df.x[, 1:ncol(df.x)], list(df.x$lbl), mean)
df.x.agg <- df.x.agg[,2:ncol(df.x.agg)]

我想做的是重写第一列 X1 的每个值在 df.x通过比较 df.x 的每个值df.x.agg 中第一列的所有值并将其替换为 df.x.agg 中该行的标签具有最接近的值。这应该为 df.x 的每一列完成.所以输出将是一个新的 df.x (即 new.df.x )其中填充的是标签而不是数字。

非常感谢您的帮助。

最佳答案

我使用固定种子生成样本数据以确保可重复性。

# Sample data
set.seed(2017)
df.x <- data.frame(replicate(9,sample(0:100,1000,rep=TRUE)))
df.x$lbl <- (replicate(1,sample(0:15,1000,rep=TRUE)))

df.x.agg <- aggregate(df.x[, 1:ncol(df.x)], list(df.x$lbl), mean)
df.x.agg <- df.x.agg[,2:ncol(df.x.agg)]


df.x.new <- mapply(
function(x, y) apply(outer(x, y, function(v, w) abs(v - w)), 1, which.min) - 1,
df.x[, -ncol(df.x)], df.x.agg[, -ncol(df.x.agg)])
head(df.x.new)
# X1 X2 X3 X4 X5 X6 X7 X8 X9
#[1,] 10 10 2 5 9 11 0 12 7
#[2,] 10 14 8 3 10 1 0 0 7
#[3,] 0 14 11 3 10 1 8 12 0
#[4,] 1 14 9 10 12 1 5 12 0
#[5,] 10 3 11 5 9 1 2 12 7
#[6,] 10 0 11 11 9 0 0 12 7

对于 df.x 的每个条目,df.x.new 存储 lbl 中同一列中最接近的条目 df.x.agg。我将“最接近”定义为两个值之间的绝对差异

交叉检查:取条目 df.x.new[1, 1] = 10;我们确认对于 df.x$X1[1] = 93df.x.agg$X1lbl = 10 的条目是确实是“最接近”

df.x.agg$lbl[which.min(df.x$X1[1] - df.x.agg$X1)]
#[1] 10

关于重写 data.frame 并用第二个 data.frame 中最接近的值替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51413181/

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