gpt4 book ai didi

R - if-else 应用于列表

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

我是R的新手,所以可能有些概念不完全正确......我有一组文件,我读入了一个列表(这里只显示了每个文件的前 3 行):

myfiles<-lapply(list.files(".",pattern="tab",full.names=T),read.table,skip="#")
myfiles
[[1]]
V1 V2 V3
1 10001 33 -0.0499469
2 30001 65 0.0991478
3 50001 54 0.1564400

[[2]]
V1 V2 V3
1 10001 62 0.0855260
2 30001 74 0.1536640
3 50001 71 0.1020960

[[3]]
V1 V2 V3
1 10001 49 -0.04661360
2 30001 65 0.16961500
3 50001 61 0.07089600

我想应用 ifelse 条件来替换列中的值,然后返回完全相同的列表。但是,当我这样做时:

myfiles<-lapply(myfiles,function(x) ifelse(x$V2>50, x$V3, NA))
myfiles
[[1]]
[1] NA 0.0991478 0.1564400

[[2]]
[1] 0.0855260 0.1536640 0.1020960

[[3]]
[1] NA 0.16961500 0.07089600

它实际上做了我想做的,但只返回应用函数的列,我希望它返回与以前相同的列表,有 3 列(但有替换)。

我想应该有一种简单的方法可以通过“应用”的一些变体来做到这一点,但我无法找到它或解决它。

谢谢

最佳答案

您可以使用 lapplytransform/within .存在三种可能:

  • a) ifelse

    lapply(myfiles, transform, V3 = ifelse(V2 > 50, V3, NA))
  • b) 数学运算符(可能更有效)

    lapply(myfiles, transform, V3 = NA ^ (V2 <= 50) * V3)
  • c) is.na<-

    lapply(myfiles, within, is.na(V3) <- V2 < 50)

结果

[[1]]
V1 V2 V3
1 10001 33 NA
2 30001 65 0.0991478
3 50001 54 0.1564400

[[2]]
V1 V2 V3
1 10001 62 0.085526
2 30001 74 0.153664
3 50001 71 0.102096

[[3]]
V1 V2 V3
1 10001 49 NA
2 30001 65 0.169615
3 50001 61 0.070896

关于R - if-else 应用于列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906436/

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