gpt4 book ai didi

根据相应的列 r 替换列值

转载 作者:行者123 更新时间:2023-12-02 09:06:56 25 4
gpt4 key购买 nike

我有大约 60 个不同的列,其中 30 个列按名称对应于其余 30 个列。我想根据其他相应值替换这 30 个列值。

  1. 示例数据:
df.wide<-data.frame(
title=c("A","B","C","D"),
IM.A=c(0.5,0.1,4.6,5.6),
LV.A=c(0.7,0,2.5,5),
IM.B=c(0.2,0.4,2.6,2.2),
LV.B=c(1,2,4.5,5),
IM.C=c(2,1,3,4),
LV.C=c(3,2,5,1)
)

对于数据中的每个标题,我有更多列 - IM.D~~ LM.D~~。

  • 我已将数据重新调整为很长,以提取唯一的列名称:
  • df.long <- gather(df.wide, element,value, IM.A:LV.C)
    df.long <- select(df.long, c("element"))
    df.long <- unique(df.long)
  • 我已将 LV 和 IM 分成不同的数据。
  • lv <- as.data.frame(df.long[grep("LV", df.long$element), ])
    im <- as.data.frame(df.long[grep("IM", df.long$element), ])
  • 我不知道如何从这里继续,但基本上我想将列 LV 值更改为 0(如果其对应的 IM 值小于 2.5),并且我尚未在互联网上找到解决方案。<
  • 最终数据如下所示:

    df.wide<-data.frame(
    title=c("A","B","C","D"),
    IM.A=c(0.5,0.1,4.6,5.6),
    LV.A=c(0,0,2.5,5),
    IM.B=c(0.2,0.4,2.6,2.2),
    LV.B=c(0,0,4.5,0),
    IM.C=c(2,1,3,4),
    LV.C=c(0,0,5,1)
    )

    最佳答案

    也许可以将您的数据放在长格式中:

    library(data.table)
    setDT(df.wide)

    dt.long = melt(df.wide, meas=patterns(IM = "^IM", LV = "^LV"))
    dt.long[, variable := c("A","B","C")[variable]]

    title variable IM LV
    1: A A 0.5 0.7
    2: B A 0.1 0.0
    3: C A 4.6 2.5
    4: D A 5.6 5.0
    5: A B 0.2 1.0
    6: B B 0.4 2.0
    7: C B 2.6 4.5
    8: D B 2.2 5.0
    9: A C 2.0 3.0
    10: B C 1.0 2.0
    11: C C 3.0 5.0
    12: D C 4.0 1.0

    从这里可以轻松进行编辑:

    dt.long[IM < 2.5, LV := 0]

    如果你想使用tidyr:据我所知,gather在转换为长格式时不支持创建两列。下一代函数 pivot_longer 可能会。


    我建议尽可能长时间地继续使用长格式的数据,以避免进一步摆弄变量名称,但如果您需要恢复宽格式,那么......

    res = dcast(dt.long, title ~ variable, value.var=c("IM", "LV"), sep=".")

    title IM_A IM_B IM_C LV_A LV_B LV_C
    1: A 0.5 0.2 2 0.0 0.0 0
    2: B 0.1 0.4 1 0.0 0.0 0
    3: C 4.6 2.6 3 2.5 4.5 5
    4: D 5.6 2.2 4 5.0 0.0 1

    如果您想要相同的列顺序,则需要执行进一步的步骤:

    setcolorder(res, names(df.wide))

    title IM.A LV.A IM.B LV.B IM.C LV.C
    1: A 0.5 0.0 0.2 0.0 2 0
    2: B 0.1 0.0 0.4 0.0 1 0
    3: C 4.6 2.5 2.6 4.5 3 5
    4: D 5.6 5.0 2.2 0.0 4 1

    关于根据相应的列 r 替换列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57171253/

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