使用lapply在数据帧列表上循环which()函数

问题描述 投票:0回答:1

我在R遍历数据帧列表的which()函数时遇到问题。我需要将所有大于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"

相反,当我在每个单个数据帧上运行which()函数时,它都可以正常工作

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

有人可以帮忙吗?

r list dataframe lapply which
1个回答
1
投票

如果您返回x,它会起作用

lapply(mylist_a, function(x){
    x[which(x>1)] <- 1
    x
})

另一种替代方法是使用pmax

lapply(mylist_a, function(x) pmax(x, 1))
© www.soinside.com 2019 - 2024. All rights reserved.