Рассчитать процент на основе значений, соответствующих имени заголовка в отдельной таблице (R) - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь рассчитать проценты из таблицы, изложенной как:

Thing    stuff    group1    group2    group3
Abcd     A.       42.       17.       0
Y682.    B.       3.        12.       9
Bh57.    A.       22.       10.       1
Jdje.    B.       2.        3.        12

(Простите за периоды форматирования и ошибочные, я отправляю с моего телефона.)

Iиметь соответствующую таблицу, в которой есть число, на которое необходимо разделить значения на основе имени их столбца.

Group1.   45
Group2.   30
Group3.   15

с желаемым выходным значением:

Thing    stuff    group1    group2    group3
Abcd     A.       93.3      56.7      0
Y682.    B.       6.7       40.0      60.0
Bh57.    A.       48.9      33.3      6.66
Jdje.    B.       4.4       10.0      80

У меня нетуселся еще над этим работать, просто надеясь начать его завтра!Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: РЕШЕНИЕ Я смог заставить его работать с помощью:

df3 <- df1 
for(i in seq_len(nrow(df2))) 
{ 
df3[, df2$Type[i]] <- format((df1[, df2$Type[i]] / df2$n[i])*100,digits=2) 
}

1 Ответ

0 голосов
/ 12 декабря 2018

Вот ответ, который работает, хотя он не обязательно способен масштабироваться для больших наборов данных:

 df <- data.frame(Thing=c("Abcd", "Y682", "BH", "Jd"), 
                  stuff=c("A","B","A","B"),
                  G1=c(42,3,22,2),
                  G2=c(17,12,10,3),
                  G3=c(0,9,1,12))

 df2 <- data.frame(G1=45, G2=30, G3=15)

 for(i in 3:ncol(df)){
    df[, i] <- df[, i]/df2[, i-2]*100
 }

Это зависит от правильного порядка столбцов во втором фрейме данных

РЕДАКТИРОВАТЬ: это лучший способ, при котором столбцы не находятся в правильном порядке, но вам все равно нужны имена столбцов для соответствия между фреймами данных:

 for (i in names(df)){
   if (exists(where = df2, x = i)){
     df[, i] <- format(as.numeric(df[, i])/df2[, which(names(df2)==i)], digits=2)
   }
 }
...