Этот вопрос является модифицированной версией подсчета определенных слов по нескольким столбцам в R , но с добавленной сложностью определения различных весов для определенных столбцов.Как сделать так, чтобы некоторые столбцы считались как 1, а другие - как 0.5?
Воспроизводимый пример:
df <- data.frame(id=c(1, 2, 3, 4, 5), staple_1=c("potato", "potato","rice","fruit","coffee"),
staple2_half1=c("yams","beer","potato","rice","yams"),
staple2_half2=c("potato","rice","yams","rice","yams"),
staple_3=c("rice","peanuts","fruit","fruit","rice"))
potato<-c("potato")
yams<-c("yams")
staples<-c("potato","cassava","rice","yams")
дает:
id staple_1 staple2_half1 staple2_half2 staple_3
1 potato yams potato rice
2 potato beer rice peanuts
3 rice potato yams fruit
4 fruit rice rice fruit
5 coffee yams yams rice
Теперь я хочу создать 2 дополнительных столбца, суммирующих значения «potato» и «yams», ноизменив следующий код так, чтобы любые значения из столбца «half» (staple2_half1 и staple2_half2) учитывались только как 0.5 вместо 1.
Неправильный результат с использованием исходного ответа:
df$staples <- apply(df, 1, function(x) sum(staples %in% x))
df$potato<- apply(df, 1, function(x) sum(potato %in% x))
df$yams<- apply(df, 1, function(x) sum(yams %in% x))
Дает:
id staple_1 staple2_half1 staple2_half2 staple_3 staples potato yams
1 potato yams potato rice 3 1 1
2 potato beer rice peanuts 2 1 0
3 rice potato yams fruit 3 1 1
4 fruit rice rice fruit 1 0 0
5 coffee yams yams rice 2 0 1
Желаемый результат на основе взвешенного количества:
id staple_1 staple2_half1 staple2_half2 staple_3 staples potato yams
1 potato yams potato rice 3 1.5 0.5
2 potato beer rice peanuts 1.5 1 0
3 rice potato yams fruit 2 0.5 0.5
4 fruit rice rice fruit 1 0 0
5 coffee yams yams rice 2 0 1