Сначала позвольте мне заявить, что я довольно плохо знаком с R, и это может быть легко для опытного пользователя.Я пытался выяснить, как я могу выполнить условное разделение значений внутри фрейма данных.В частности, у меня есть фрейм данных (как показано ниже df1
) с несколькими идентификаторами.Я хочу разделить значения со значениями в векторе или df (df2
) с соответствующими уникальными идентификаторами (как показано ниже), сохраняя при этом идентификаторы без изменений.
ID = c("nr6536","nr8798","nr8723","nr8276","nr7774","nr0093")
Conc = c("1:2","1:4","1:2","1:8","1:4","1:4")
ID1 = c("ID","Conc","Eb","Eb","Sd","Sd","Re","Sd")
ID2 = c("Re","Sd","Eb")
dat1 = c(2,3,4,5,6,7)
dat2 = c(8,9,10,11,12,13)
dat3 = c(1,2,3,4,5,6)
dat4 = c(4,3,2,7,6,5)
dat5 = c(8,7,6,3,4,8)
dat6 = c(6,4,2,5,3,8)
dat7 = c(9,2,7)
df1 = data.frame(ID,Conc,dat1,dat2,dat3,dat4,dat5,dat6)
colnames(df1)=ID1
df2 = data.frame(t(dat7)); colnames(df2)=ID2
rm(ID,Conc,ID1,ID2,dat1, dat2,dat3,dat4,dat5,dat6,dat7)
Требуемый вывод:
ID Conc Eb Eb Sd Sd Re Sd
nr6536 1:2 0.2857 1.1429 0.5 2 0.8889 3
nr8798 1:4 0.4286 1.2857 1 1.5 0.7778 2
nr8723 1:2 0.5714 1.4286 1.5 1 0.6667 1
nr8276 1:8 0.7143 1.5714 2 3.5 0.3333 2.5
nr7774 1:4 0.8571 1.7143 2.5 3 0.4444 1.5
nr0093 1:4 1 1.8571 3 2.5 0.8889 4
Я пробовал с ave
, tabulate
и с ifelse
, но не смог получить желаемый результат.Нефункциональный пример этого приведен ниже:
library(reshape2)
df1.2 = melt(df1)
df2names = colnames(df2)
df2.2 = as.data.frame(t(df2)); df2.2$variable=df2names
df3 = as.data.frame(apply(df1.2,1,function(x){
ScaVal = ifelse(x$variable %in% df2.2$variable, value/df2.2$V1)
return(ScaVal)
}))
У кого-нибудь есть какие-либо предложения, как это можно сделать?Заранее спасибо!