Мне нужна функция, которая проверяет частоту значений в строке в df, а затем проверяет, появляется ли одно из значений 6 или более раз, и если да, отображает это значение в новом столбце. Если нет, вместо этого записывается «nope» в том же новом столбце. В приведенном ниже примере: значения в строках равны 1, 2 или 3. Поэтому, если одно из значений 1,2, or3 появляется 6 или более раз для каждой строки, какое бы значение (1,2 или 3) должен появиться в новом столбце. Если ни одно из значений не появляется 6 или более раз для каждой строки, значение в этом же новом столбце должно быть «nope». exampleФункция для извлечения запросов чисел в строках в R
ответ
Попробуйте применить функцию table
для каждой строки с помощью
make_count_col <- function(x) {
cnt <- apply(x, 1, table)
x$newcolumn <- apply(cnt, 2, function(y) {
if (max(y, na.rm = T) < 6)
out <- 'nope'
else
out <- names(y)[which.max(y)]
out
})
x
}
Ваш пример реплицируется
x <- as.data.frame(matrix(c(1, 2, 1, 2, 2, 2, 2, 2, 3,
2, 3, 1, 1, 3, 2, 1, 1, 3), nrow = 2, byrow = T))
colnames(x) <- paste0('svo', 1:9)
make_count_col(x)
svo1 svo2 svo3 svo4 svo5 svo6 svo7 svo8 svo9 newcolumn
1 2 1 2 2 2 2 2 3 2
2 3 1 1 3 2 1 1 3 nope
Дорогой Бен, спасибо, но я получить ошибку «Dim (x) должна иметь положительную длину», которая в основном говорит мне, что она не может применяться :) функция apply для объекта cnt, поскольку объект cnt является списком. Я попытался создать объект cnt за пределами функции с помощью «apply (x, 1, table)», но когда я прикрепляю его обратно к фреймворку данных, он создает столбец с векторами, содержащий число, если происходит, что, естественно, понижает весь фрейм данных в список, и я не могу далее применять функцию max. –
Можете ли вы предоставить лучший пример того, что вы передаете функции как 'x'? Я попытался использовать то, что вы дали выше, и это работает для меня. –
Дорогой Бен, спасибо, Это была застрявшая сессия R :(Большое спасибо за вашу помощь –
Вы можете проверить 'apply' и' table' – akrun