R循环列

时间:2018-03-24 16:40:22

标签: r loops dataframe cap

如何循环数据框中的列并将值限制在该列的第97.5百分位?

EG。如果一个特定列的值为1到100,则值> 97.5,即98,99和100都应该给出97.5。

请参阅,我想对数据框中的第4列进行此操作。

3 个答案:

答案 0 :(得分:1)

以下是您尝试做的最小示例。这里我要修改最后两列:

set.seed(2)

library(data.table)
df <- data.table(a = runif(10, 90, 100), 
                 b = runif(10, 95, 105),
                 c = runif(10, 90, 100))

df[,c('b','c') := lapply(.SD, function(x) pmin(x, quantile(x, 0.975))), .SDcols = c('b','c')]

print(df)

           a         b        c
 1: 91.82174 103.40371 99.49889
 2: 93.60763 104.45268 91.01073
 3: 99.03800  95.44965 92.56751
 4: 93.94048 102.58383 98.95147
 5: 97.79881  97.96888 93.87944
 6: 92.84159 101.51054 97.94285
 7: 98.53721  95.84990 93.49397
 8: 91.72242 104.68683 91.38744
 9: 90.79264  95.13625 96.50509
10: 92.92065 100.38869 95.44004

答案 1 :(得分:1)

使用@ManishSaraswat设置的数据,我相信你想要这样的东西,

{{1}}

我希望这有帮助!

答案 2 :(得分:1)

您可以在基础R

中的一行中执行此操作
#set up the data
df <- data.frame(a = sample(100,replace=TRUE), 
                 b = sample(100,replace=TRUE),
                 c = sample(100,replace=TRUE))

df2 <- as.data.frame(lapply(df, function(x) pmin(x, quantile(x, 0.975))))

要修改数据框的第4到第10列(例如),您可以执行

data[,4:10] <- as.data.frame(lapply(data[,4:10], function(x) pmin(x, quantile(x, 0.975))))