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)
非常感谢您的帮助.
这是一个类似的方法(也许更多的矢量化?)
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)
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |