我有一个数据框:
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?
感谢您的帮助。
答案 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