获取数据框中的最小行数

时间:2012-01-24 15:58:40

标签: r dataframe min

我正在处理一个包含65个变量的数据框。第一个变量为一个人编目,接下来的64个变量表示该人与64个位置中的每一个的地理距离。使用R,我想创建一个新变量,将每个人的最短距离编目到这64个位置之一。

例如:如果人X距离位置35,50,79,100,450 ......英里,我希望新变量自动为它们分配35,因为这是最短的距离。 任何有关这方面的帮助将非常感激。谢谢。

3 个答案:

答案 0 :(得分:12)

或者,使用Justin的例子:

df$shortest <- do.call(pmin,df[-1])

另请参阅?pmin?do.call,并注意您可以使用列表索引删除数据框中的第一个变量(因此根本不使用任何逗号,另请参阅{{1} })

答案 1 :(得分:9)

df <- data.frame(let=letters[1:25], d1=sample(1:25,25), d2=sample(1:25,25), d3=sample(1:25,25))

df$shortest <- apply(df[,2:4],1,min)

第二行将函数min应用于每一行,并将其分配给data.frame df中的新列。有关第二行正在做什么的更多说明,请参阅?apply。小心跳过第一列或任何不是距离的列:

apply(df,1,min)给出了完全不同的答案,因为它找到了字符串的“min”。

> min(2:10)
[1] 2
> min(as.character(2:10))
[1] "10"

答案 2 :(得分:4)

我会通过应用来解决这个问题,但转换或其他方法可能有效。

#fake data set
ID=LETTERS[1:5], distance=matrixsample(
DF <- as.data.frame(matrix(sample(1:100, rep=T, 100), 5, 20))
DF <- data.frame(ID=LETTERS[1:5], DF)

#solution
DF$newvar <- apply(DF[,-1], 1, min)