умножение фреймов данных условно в R - PullRequest
3 голосов
/ 26 апреля 2011

Я хочу умножить два фрейма данных с неравной длиной. Если у меня есть фрейм данных наблюдений (в действительности это около 30000 записей)

Species    number
1          3
1          3
3          5
4          40
5          22

и еще один фрейм данных с коэффициентами преобразованиядля каждого вида, присутствующего в первом кадре данных (это всего около 120 записей в длину)

species    conversion ratio
1          3
2          5
3          4
4          2
5          2

, и я хочу умножить каждую запись в числовом столбце на запись коэффициента преобразования, связанную с этим видом, как я могупродолжать делать это в R?

Я пытался использовать функцию соответствия безрезультатно, и мои попытки работать с массивами также приводили только к ошибкам.

Ответы [ 2 ]

4 голосов
/ 26 апреля 2011

См. ?merge. Предполагая, что у вас есть species, имя которого последовательно (прописные):

df3 <- merge(df1,df2)
df3$number*df3$conversion.ratio
3 голосов
/ 26 апреля 2011

Вы можете объединить два фрейма данных.

## Your example data
df.number <- matrix(c(1, 1, 3, 4, 5, 3, 3, 5, 40, 22), ncol = 2)
colnames(df.number) <- c("species", "number")
df.ratio <- matrix(c(1, 2, 3, 4, 5, 3, 5, 4, 2, 2), ncol = 2)
colnames(df.ratio) <- c("species", "ratio")

## Merge the two matrices
dat <- merge(df.number, df.ratio, by = "species")

## Multiply for your result
result <- with(dat, number * ratio)

Редактировать

@ Фрэнк: в своем комментарии к Джеймсу вы говорите, что результирующий кадр данных после слияния слишком длинный. Вы хотите удалить дублирующиеся строки? Если так:

dat2 <- subset(dat, subset = !duplicated(dat))
result2 <- with(dat2, number * ratio)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...