Получение минимума строк в кадре данных - PullRequest
8 голосов
/ 24 января 2012

Я работаю с фреймом данных, в котором 65 переменных.Первая переменная каталогизирует человека, а следующие 64 переменные указывают географическое расстояние, от которого этот человек находится в каждом из 64 мест.Используя R, я хотел бы создать новую переменную, которая каталогизирует кратчайшее расстояние для каждого человека до одного из этих 64 мест.

Например: если человек Х находится на расстоянии 35, 50, 79, 100, 450 ... миль от мест, я хотел бы, чтобы новая переменная автоматически присвоила ему 35, потому что это самое короткое расстояние,Любая помощь с этим будет высоко ценится.Благодарю.

Ответы [ 3 ]

12 голосов
/ 24 января 2012

Или, используя пример Джастина:

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

см. Также ?pmin и ?do.call, и обратите внимание, что вы можете удалить первую переменную в вашем фрейме данных, используя индексы списка (такбез запятой вообще, см. также ?Extract)

9 голосов
/ 24 января 2012
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(2:10)
[1] 2
> min(as.character(2:10))
[1] "10"
4 голосов
/ 24 января 2012

Я бы подошел к этому с применением, но преобразование или другой подход могли бы сработать.

#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)
...