Есть ли функция R для подсчета того же значения в строке? - PullRequest
0 голосов
/ 02 января 2019

Я ищу функцию, которая может дать мне количество раз, когда одна и та же строка присутствует в строке, возвращая это число в новом столбце с этой символьной строкой в ​​качестве имени. Давайте рассмотрим пример:

 df <- data.frame(
   Year = rnorm(3), 
   hour = rnorm(3), 
   LOT = rnorm(3), 
   S123_AA = c('ABF4576','AG4633','AWW07954'), 
   S135_AA = c('ABF5403','ABF4576','A64ED56'), 
   S1763_BB = c('BF50343','BGF4761','B76WW56'),  
   S173_BB = c('BF50343','BDZ4641','B917656') 
 )

Итак, в первой строке мы наблюдаем дважды `BF50343, и я собираюсь построить новые столбцы, чтобы получить:

 df <- data.frame(
   Year = rnorm(3), 
   hour = rnorm(3), 
   LOT = rnorm(3), 
   S123_AA = c('ABF4576','AG4633','AWW07954'), 
   S135_AA = c('ABF5403','ABF4576','A64ED56'), 
   S1763_BB = c('BF50343','BGF4761','B76WW56'),  
   S173_BB = c('BF50343','BDZ4641','B917656'),
   ABF4576 = c(1,1,0),
   AG4633 = c(0,1,0),
   AWW07954 = c(0,0,1),
   ABF5403 = c(1,0,0),
   A64ED56 = c(0,0,1),
   BF50343 = c(2,0,0),
   BGF4761 = c(0,1,0),
   B76WW56 = c(0,0,1),
   BDZ4641 = c(0,1,0),
   B917656 = c(0,0,1)
)

Если у вас есть идеи для развития, спасибо за ваше время

1 Ответ

0 голосов
/ 09 января 2019

Вы можете использовать lapply для циклического перебора уникальных значений ваших символьных переменных:

cols <- !(colnames(df) %in% c("Year", "hour", "LOT")) ## variables of interest
vals <- as.character(unique(unlist(df[cols]))) ## unique values
res <- do.call("cbind", lapply(vals, function(x) rowSums(df[cols] == x)))
colnames(res) <- vals
df <- cbind(df, res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...