R循环遍历列
R Loop through Columns
如何遍历数据框中的列并将值限制在该列的第 97.5 个百分位?
例如。如果一个特定的列中填充了 1 到 100 的值,则值 >97.5,即 98、99 和 100 都应该被赋予 97.5.
请看,我想对数据框中最后的第 4 列执行此操作。
这是您尝试执行的操作的最小示例。我在这里修改最后两列:
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
使用@ManishSaraswat 设置的数据,我相信你想要这样的东西,
df <- data.frame(a = runif(10, 90, 100),
b = runif(10, 95, 105),
c = runif(10, 90, 100))
apply(df, 2, function(x){
quant <- quantile(x, 0.975)
ifelse(x > quant, quant, x)
})
希望对您有所帮助!
您可以在基数 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))))
如何遍历数据框中的列并将值限制在该列的第 97.5 个百分位?
例如。如果一个特定的列中填充了 1 到 100 的值,则值 >97.5,即 98、99 和 100 都应该被赋予 97.5.
请看,我想对数据框中最后的第 4 列执行此操作。
这是您尝试执行的操作的最小示例。我在这里修改最后两列:
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
使用@ManishSaraswat 设置的数据,我相信你想要这样的东西,
df <- data.frame(a = runif(10, 90, 100),
b = runif(10, 95, 105),
c = runif(10, 90, 100))
apply(df, 2, function(x){
quant <- quantile(x, 0.975)
ifelse(x > quant, quant, x)
})
希望对您有所帮助!
您可以在基数 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))))