gpt4 book ai didi

根据一组条件用其他数据框中的值替换数据框中的值

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

在 df1 中,我需要用 df2 中的相应值替换 msec 的值。

df1 <- data.frame(ID=c('rs', 'rs', 'rs', 'tr','tr','tr'), cond=c(1,1,2,1,1,2), 
block=c(2,2,4,2,2,4), correct=c(1,0,1,1,1,0), msec=c(456,678,756,654,625,645))

df2 <- data.frame(ID=c('rs', 'rs', 'tr','tr'), cond=c(1,2,1,2),
block=c(2,4,2,4), mean=c(545,664,703,765))

在 df1 中,如果 correct==0 ,则使用 df2IDcond 的匹配值引用 block 。将 msecdf1 的值替换为 meandf2 的相应值。

例如, df1 中的第二行有 correct==0 。因此,在 df2 中找到 ID=='rs'cond==1block==2 所在的相应行,并使用均值 ( mean=545 ) 的值替换 msec ( msec=678 ) 的值。请注意,在 df1 中,ID、block 和 cond 的组合可以重复,但每个组合在 df2 中仅出现一次。

最佳答案

使用 data.table 包:

# load the 'data.table' package
library(data.table)

# convert the data.frame's to data.table's
setDT(df1)
setDT(df2)

# update df1 by reference with a join with df2
df1[df2[, correct := 0], on = .(ID, cond, block, correct), msec := i.mean]

这使:
> df1
ID cond block correct msec
1: rs 1 2 1 456
2: rs 1 2 0 545
3: rs 2 4 1 756
4: tr 1 2 1 654
5: tr 1 2 1 625
6: tr 2 4 0 765

注意:上面的代码会更新 df1 而不是创建一个新的数据帧,这样更节省内存。

关于根据一组条件用其他数据框中的值替换数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545307/

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