[英]looping the which() function over a list of dataframes with lapply
我在 R 在数据帧列表上循环 which() function 时遇到问题。 我需要用 1 替换所有 >1 的数字。这是我的代码。
mylist_b <- lapply(mylist_a, function(x){
x[which(x>1)] <- 1
})
这是我的 mylist_a 数据框之一
D1 D2 D3
a 0.68659264 1.047092e+01 1.0009219
b 0.02358574 7.992743e-04 0.3253237
c 5.23294642 1.130614e+01 5.6566890
d 2.86947631 7.860165e+00 15.0000000
e 8.09922178 8.196586e+00 15.0000000
f 15.00000000 1.500000e+01 1.8389688
当我运行我的代码时,我得到了 mylist_b,但它是一个数字向量列表,每个向量只有一个值。
> mylist_b$dataframe_a
[1] 1
> class(mylist_b$dataframe_a)
[1] "numeric"
相反,当我在每个 dataframe 上运行 which() function 它工作正常
mylist_a$dataframe_a[which(mylist_a$dataframe_a>1)] <- 1
这是结果
D1 D2 D3
a 6.865926e-01 1.000000e+00 1.000000e+00
b 2.358574e-02 7.992743e-04 3.253237e-01
c 1.000000e+00 1.000000e+00 1.000000e+00
d 1.000000e+00 1.000000e+00 1.000000e+00
e 1.000000e+00 1.000000e+00 1.000000e+00
f 1.000000e+00 1.000000e+00 1.000000e+00
有人可以帮忙吗?
如果你返回x
就可以了
lapply(mylist_a, function(x){
x[x>1] <- 1
x
})
另一种选择是使用pmin
lapply(mylist_a, function(x) pmin(as.matrix(x), 1))
一个选项也是使用replace
lapply(mylist_a, function(x) replace(x, x > 1, 1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.