R循环通过列

R循环通过列,r,loops,dataframe,cap,R,Loops,Dataframe,Cap,如何循环数据框中的列并将值限制在该列的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),

如何循环数据框中的列并将值限制在该列的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
set.seed(2)
库(数据表)

df这里有一个关于您尝试做什么的最小示例。在这里,我将修改最后两列:

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
set.seed(2)
库(数据表)

df使用@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)
})

df使用@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)
})

df您可以在base 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))))
#设置数据

df您可以在基本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))))
#设置数据

df欢迎来到SO!你能举个数据的例子吗?另外,在这里阅读更多关于提出问题的内容:欢迎来到SO!你能举个数据的例子吗?另外,请阅读更多关于在此处提出问题的信息:或在R基:
DF[]97.5,97.5,x))
为什么会被否决?@ManishSaraswat可能是因为OP询问的是数据的分位数,而不是值。@AndrewGustar非常感谢。回答问题的这种兴奋有时让我发疯。“从现在起我会小心的。”马尼什萨拉斯瓦特我知道这种感觉——我们都做过!或者在R基:
DF[]97.5,97.5,x))
为什么会被否决?@ManishSaraswat可能是因为OP询问的是数据的分位数,而不是值。@AndrewGustar非常感谢。回答问题的这种兴奋有时让我发疯。“从现在起我会小心的。”马尼什萨拉斯瓦特我知道这种感觉——我们都做过!