簡體   English   中英

使用 lapply 在數據幀列表上循環 which() function

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM