Умножьте все значения в каждом столбце фрейма данных на другое значение на основе совпадающих имен столбцов - PullRequest
1 голос
/ 30 апреля 2020

Я хотел бы найти эффективный способ умножения всех значений в каждом столбце в этом фрейме данных

dd <- data.frame(a=1:10,b=2:11,c=3:12)

на значение, которое соответствует имени этого столбца в другом «индексе» данных- frame (как в любом из приведенных ниже примеров)

d.1 <- data.frame(p=c("a","b","c"),q=3:5)
d.2 <- data.frame(a=3,b=4,c=5)

Есть ли способ для l oop для достижения этой цели?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Я предоставляю вам for l oop -подобную стратегию для обоих случаев: Использование d.1:

dd_new <- vector()

for(i in 1:length(dd)){
  new_col <- dd[, i] * d.1$q[which(d.1$p==names(dd)[i])]
  dd_new <- as.data.frame(cbind(dd_new, new_col))
}
dd_new

Использование d.2:

dd_new <- vector()

for(i in 1:length(dd)){
  new_col <- dd[, i] * d.2[, which(names(d.2)==names(dd)[i])]
  dd_new <- as.data.frame(cbind(dd_new, new_col))
}
dd_new
0 голосов
/ 30 апреля 2020

Мы можем скопировать второй набор данных и выполнить умножение, если мы используем 'd.2'

dd[names(d.2)] <-  dd[names(d.2)] * d.2[col(dd[names(d.2)])]

С 'd.1'

dd[as.character(d.1$p)] <-  dd[as.character(d.1$p)] * d.1$q[col(dd[d.1$p])]
...