gpt4 book ai didi

R:用第二个列表元素的值替换一个列表元素的值

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

我想用列表的第二个元素的值替换列表的一个元素的值。具体来说,

  • 我有一个包含多个数据集的列表。
  • 每个数据集有2个变量
  • 变量是因素
  • 需要将每个数据集中第二个变量的第n个元素替换为每个数据集中第一个变量的第n个元素
  • 另外,被替换的值应该叫做“replaced”
  • dat1 <- data.frame(names1 =c("a", "b", "c", "f", "x"),values= c("val1_1", "val2_1", "val3_1", "val4_1", "val5_1"))
    dat1$values <- as.factor(dat1$values)
    dat2 <- data.frame(names1 =c("a", "b", "f2", "s5", "h"),values= c("val1_2", "val2_2", "val3_2", "val4_2", "val5_2"))
    dat2$values <- as.factor(dat2$values)
    list1 <- list(dat1, dat2)

    结果应该是相同的列表,但只是替换了第 5 个值。

    [[1]]
    names1 values
    1 a val1_1
    2 b val2_1
    3 c val3_1
    4 f val4_1
    5 replaced x
    [[2]]
    names1 values
    1 a val1_2
    2 b val2_2
    3 f2 val3_2
    4 s5 val4_2
    5 replaced h

    最佳答案

    使用 lapply 的基本 R 方法,因为两列都是我们需要先添加新的 levels 的因素,然后再用新值替换它们,否则这些值将变为 NAs.

    n <- 5

    lapply(list1, function(x) {
    levels(x$values) <- c(levels(x$values), as.character(x$names1[n]))
    x$values[n] <- x$names1[n]
    levels(x$names1) <- c(levels(x$names1), "replaced")
    x$names1[n] <- "replaced"
    x
    })

    #[[1]]
    # names1 values
    #1 a val1_1
    #2 b val2_1
    #3 c val3_1
    #4 f val4_1
    #5 replaced x

    #[[2]]
    # names1 values
    #1 a val1_2
    #2 b val2_2
    #3 f2 val3_2
    #4 s5 val4_2
    #5 replaced h

    还有另一种方法,我们可以将两列都转换为字符,然后替换所需位置的值,然后再次将它们转换回因子,但是由于列表中的每个数据框都可能很大,我们不想转换所有的值转换为字符,然后返回到因子只是为了改变一个值,这在计算上可能非常昂贵。

    关于R:用第二个列表元素的值替换一个列表元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54504054/

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