У меня есть несколько фреймов данных (96), которые имеют столбцы 0 и 1.Если в одном столбце данных есть несколько «1», я хочу заменить 1 на равные доли, чтобы сумма значений в столбце была равна 1, как показано в коде ниже.
v1 <- c(0, 1, 0, 1, 1, 0)
v2 <- c(0, 0, 1, 0, 0, 0)
v3 <- c(0, 0, 1, 1, 0, 0)
df1 <- data.frame(v1, v2, v3)
df2 <-data.frame(v3, v3, v1)
df3 <- data.frame(v1, v3, v1)
new.df1 <- t(apply(df1, 2, FUN = function(x) {
if(sum(x==1, na.rm=TRUE) ==2) replace(x, x==1, 0.5)
else if (sum(x==1, na.rm=TRUE)==3) replace( x, x==1, 1/3)
else x}))
new.df2 <- t(apply(df2, 2, FUN = function(x) {
if(sum(x==1, na.rm=TRUE) ==2) replace(x, x==1, 0.5)
else if (sum(x==1, na.rm=TRUE)==3) replace( x, x==1, 1/3)
else x}))
new.df3 <- t(apply(df3, 2, FUN = function(x) {
if(sum(x==1, na.rm=TRUE) ==2) replace(x, x==1, 0.5)
else if (sum(x==1, na.rm=TRUE)==3) replace( x, x==1, 1/3)
else x}))
Я могу создать то, что хочу, грубой силой, как в приведенном выше примере, но должен быть лучший (более краткий) способ.Я был бы очень признателен за помощь.