gpt4 book ai didi

r - 使用 dplyr 包进行数据框转换的问题

转载 作者:行者123 更新时间:2023-12-04 15:13:14 27 4
gpt4 key购买 nike

问题

让我们考虑两个数据框:

一个只包含 1 和 0,第二个包含数据:

set.seed(20)
df<-data.frame(sample(0:1,5,T),sample(0:1,5,T),sample(0:1,5,T))

#zero_one data frame
sample.0.1..5..T. sample.0.1..5..T..1 sample.0.1..5..T..2
1 0 1 0
2 1 0 0
3 1 1 1
4 0 0 0
5 1 0 1
df1<-data.frame(append(rnorm(4),10),append(runif(4),-5),append(rexp(4),20))

#with data
append.rnorm.4...10. append.runif.4....5. append.rexp.4...20.
1 0.08609139 0.2374272 0.3341095
2 -0.63778176 0.2297862 0.7537732
3 0.22642990 0.9447793 1.3011998
4 -0.05418293 0.8448115 1.2097271
5 10.00000000 -5.0000000 20.0000000

现在我想做的是更改第一个数据帧取值为 0 的第二个数据帧中的值,方法是根据第一个数据帧取值为 1 的值计算的平均值。

示例

在第一列中,我想用 mean(-0.63778176 , 0.22642990,10.00000000)(第一个数据框中第一列的值为 1)。

我想使用 dplyr 包中的 mutate_all() 函数来完成。

我目前的工作

  df1<-df1 %>% mutate_all(
function(x) ifelse(df[x]==0, mean(x[df==1],na.rm=T,x)))

我知道条件 df[x] 是没有意义的,但我不知道应该放在那里什么。你能帮我解决这个问题吗?

最佳答案

您可以按照@deschen 的建议将两个数据框相乘。

这是考虑使用 mapply 的另一种方法。对于每一列,确定 df 中值为零的位置(索引)。

然后,将这些位置对应的df1列替换为该列中其他值的平均值。 y[-idx] 应该是 df1 列中排除这些位置的所有值。

请注意,我的 set.seed 不同 - 当我使用你的 20 时,我得到了不同的值,并且有一列全为零。如果您能够重现,请告诉我。

set.seed(12)

df<-data.frame(sample(0:1,5,T),sample(0:1,5,T),sample(0:1,5,T))
df1<-data.frame(append(rnorm(4),10),append(runif(4),-5),append(rexp(4),20))

my_fun <- function(x, y) {
idx <- which(x == 0)
y[idx] <- mean(y[-idx])
return(y)
}

mapply(my_fun, df, df1)

关于r - 使用 dplyr 包进行数据框转换的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64819354/

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