R设置数据帧中行值的限制

时间:2014-04-28 12:05:20

标签: r

我有一个数据框:

a <- c(1:5)
b <- c(5:9)
c <- c(7:11)
min <- c(2,7,4,5,3)
max <- c(5,9,12,8,7)
df1 <- data.frame(a,b,c,min,max)
df1

如何设置行限制,因此每行a,b,c的最小值和最大值由列中的行值设置:min和max?

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

如果您将数据框视为列列表,我会发现这更容易:

mins <- lapply(df1[1:3], function(x) pmax(x, df1$min))
maxs <- lapply(mins, function(x) pmin(x, df1$max))

然后你可以重建data.frame:

df2 <- do.call(cbind, maxs)

答案 1 :(得分:2)

f <- function(X){
  X[X < df1$min] <- df1$min[X < df1$min]
  X[X > df1$max] <- df1$max[X > df1$max]
  X
  }

sapply(df1[,1:3] ,  f)

答案 2 :(得分:1)

尝试类似:

## Function that checks the limits of each column
limit <- function(x, mn, mx) {
    pmax(pmin(x, mx), mn)
}

## Then build your data.frame 
df2 <- data.frame(a = limit(a, min, max), b = limit(b, min, max), c = limit(c, min, max), min, max)

使用“应用”是现有data.frame

的另一个选项
df3 <- apply(df1[ ,1:3], 2, limit, mn = min, mx = max)

我希望它有所帮助,

亚历

答案 3 :(得分:1)

差不多这样:编辑我道歉:它应该是&#34; pmin&#34; for&#34; parallel minimum&#34;和&#34; pmax&#34;

for(j in 1:3 ) df1[,j]<-pmin(df1[,j],df1[,5])
for(j in 1:3 ) df1[,j<-pmax(df1[,j],df1[,4])

PS你可能最好使用matrix