【发布时间】:2015-01-10 10:53:51
【问题描述】:
我是 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 列(但有替换)。
我想应该有一种简单的方法可以使用“应用”的一些变体来做到这一点,但我无法找到或解决它。
谢谢
【问题讨论】:
-
如果要替换
V3列,只需修改函数:lapply(myfiles,function(x) {x$V3<-ifelse(x$V2>50, x$V3, NA);x})。如果要添加另一个名为newcolumnname的列,只需将上述命令中的x$V3替换为x$newcolumnname即可。 -
您要替换
V2或V3中的值吗? -
我想根据 V2 上的条件替换 V3 中的值
标签: r list if-statement apply