Считать события в камере, с условием - PullRequest
0 голосов
/ 01 марта 2020

У меня есть строка вроде этой:

0|294|314|20|314|SC49TST57ASG75A|1428.0

Используя R, я хочу извлечь только данные между двумя | (пример- SC49TST57ASG75A), а затем посчитать только те числа, которые больше 20 (в этом случае у меня есть числа 49,57,75, поэтому код должен возвращать число 3)

Я хочу применить его к столбцу во фрейме данных. В конце концов, я хочу получить новый столбец, в котором для каждой строки указывается, сколько чисел больше 20 находится внутри | .... |.

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Вы можете попробовать strsplit с split = '\\|', если вы хотите считать только между двумя каналами, вам следует исключить первый и последний элементы также, так как вы хотите, чтобы элементы были больше 20 (мы используем> знак для ясность в решении)

Я предполагаю, что ваши столбцы имеют такую ​​же структуру, как указано в вашем вопросе.

st <- '0|294|314|20|314|SC5GSC12ASG266T|1428.0'

Решение:

lapply(strsplit(st, '\\|'), function(x)sum(as.numeric(x[2:(length(x)-1)]) > 20, na.rm=TRUE))
0 голосов
/ 01 марта 2020

Я не уверен, что это то, что вы ищете, в противном случае, скажите, пожалуйста, каков ваш ожидаемый результат.

cnt <- Map(function(x) sum(as.numeric(x)>20), 
    regmatches(r <- unlist(regmatches(s,gregexpr("(?<=\\|).*?(?=\\|)",s,perl = TRUE))),
               gregexpr("\\d+\\.?\\d+?",r)))

такой, что

> cnt
[[1]]
[1] 1

[[2]]
[1] 1

[[3]]
[1] 0

[[4]]
[1] 1

[[5]]
[1] 1

ДАННЫЕ

s <- "0|294|314|20|314|SC5GSC12ASG266T|1428.0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...