删除多个列并根据R中的条件替换dataframe列的值

Aqu*_*ius 1 if-statement r filter dataframe

我有一个包含4998列的巨大数据框,列标题是公司的名称.这些列包含股票价格作为列中的值.因此,我想删除股票价格(列中的值)小于1的便士股票.因此,如果其值小于1,我想删除整个列.此外,数据框中有列,其中值波动他们低于1,但然后返回等于或大于1,在这个场景中,我希望在此列中,当值低于1时,它将被NA替换.我已经提到'将多个数据帧列中的多个值替换为另一列中的值',但我的情况略有不同.我举例说明了数据框的一小部分

df1 <- Price
     Date        A   B       C
    01/01/2000  NA  0.03    0.95
    02/01/2000  NA  0.03    0.95
    03/01/2000  NA  0.03    0.95
    04/01/2000  NA  0.03    0.95
    05/01/2000  5   0.03    0.95
    06/01/2000  6   0.5       1
    07/01/2000  7   0.5       1
    08/01/2000  8   0.5       NA
    09/01/2000  9   0.5       NA
Run Code Online (Sandbox Code Playgroud)

所需的输出数据帧

df2<- df1
Date        A   C
01/01/2000  NA  NA
02/01/2000  NA  NA
03/01/2000  NA  NA
04/01/2000  NA  NA
05/01/2000  5   NA
06/01/2000  6   NA
07/01/2000  7   1
08/01/2000  8   1
09/01/2000  9   NA
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助.

Dav*_*urg 5

这是一个类似的方法(也许更多的矢量化?)

is.na(df[-1]) <- df[-1] < 1 # Convert all values < 1 to NAs.
df[colSums(is.na(df)) != nrow(df)] # Select only the columns that have values.
#         Date  A  C
# 1 01/01/2000 NA NA
# 2 02/01/2000 NA NA
# 3 03/01/2000 NA NA
# 4 04/01/2000 NA NA
# 5 05/01/2000  5 NA
# 6 06/01/2000  6  1
# 7 07/01/2000  7  1
# 8 08/01/2000  8 NA
# 9 09/01/2000  9 NA
Run Code Online (Sandbox Code Playgroud)

或者,第二步可以是

df[c(TRUE, colSums(df[-1], na.rm = TRUE) > 0)]
## OR 
## df[c(TRUE, sapply(df[-1], sum, na.rm = TRUE) > 0)] # as already sugggested
Run Code Online (Sandbox Code Playgroud)