Поиск нескольких столбцов для строки - PullRequest
0 голосов
/ 07 мая 2018

У меня есть большой фрейм данных (примерно 40000 x 500), который я читаю из файла .CSV. Набор данных содержит список комбинаций кодов ошибок, причем каждая комбинация содержит список всех уникальных кодов. Я ищу строки, которые содержат определенный фрагмент строки, например "name=", чтобы узнать, известно ли, кто перечислил эту комбинацию. Проблема в том, что я не знаю, в каком столбце это может происходить, поскольку 10-й столбец и далее нерегулярен в строке, так как количество кодов ошибок в комбинации нерегулярно. Это означает, что после некоторой точки строки становятся пустыми, за исключением самой большой комбинации кодов ошибок. Я только знаю, что если строка содержит искомую часть строки, она будет в одном из последних 6 столбцов строки, содержащей любую информацию. Если искомый фрагмент строки находится в строке, я бы хотел получить ответ в другом столбце.

Я активно искал решение, но не смог найти ничего, что бы соответствовало моим потребностям. Кроме того, я новичок в R.

[Fake dataset]

  Year  Problem_ID  Number.of.errors  X      X.1    X.2       X.3       X.4
1 2005  Server      2                 X-4555 X-1222 name=Sara
2 2011  Hardware    3                 X-8922 X-7644 X-6485
3 2015  Software    4                 X-8494 X-4321 X-7452    X-5321   name=John
4 2018  Hardware    2                 X-6901 X-1121  
5 2007  Server      3                 X-7655 X-6555 X-8999    name=Sara

[Desired output]

  Year  Problem_ID  Number.of.errors Name X      X.1    X.2       X.3       X.4
1 2005  Server      2                1    X-4555 X-1222 name=Sara
2 2011  Hardware    3                0     X-8922 X-7644 X-6485
3 2015  Software    4                1     X-8494 X-4321 X-7452    X-5321   name=John
4 2018  Hardware    2                0     X-6901 X-1121  
5 2007  Server      3                1     X-7655 X-6555 X-8999    name=Sara

1 Ответ

0 голосов
/ 07 мая 2018

Опция # 1:

Вы можете использовать apply, как предложено @ RomanLuštrik, чтобы получить name столбец.Необходимо проверить, имеет ли какой-либо столбец в этой строке совпадающий текст с name=, используя any и grep.Решение будет выглядеть следующим образом:

df$name <- apply(df, 1, function(x)as.integer(any(grep("name=",x))))

df
#   Year Problem_ID Number.of.errors      X    X.1       X.2       X.3       X.4 name
# 1 2005     Server                2 X-4555 X-1222 name=Sara      <NA>      <NA>    1
# 2 2011   Hardware                3 X-8922 X-7644    X-6485      <NA>      <NA>    0
# 3 2015   Software                4 X-8494 X-4321    X-7452    X-5321 name=John    1
# 4 2018   Hardware                2 X-6901 X-1121      <NA>      <NA>      <NA>    0
# 5 2007     Server                3 X-7655 X-6555    X-8999 name=Sara      <NA>    1

Опция # 2: В случае, если OP интересует только строки, содержащие текст name=, тогда это будет пользовательская строка csvи затем отфильтровать строки, содержащие name=.

  All_lines <- readLines(file_name)

  desired_lines <- grep("name=", All_lines, value = TRUE)

desired_lines получает только те строки, которые содержат name=.

Данные:

df <- read.table(text = 
"Year  Problem_ID  Number.of.errors  X      X.1    X.2       X.3       X.4
1 2005  Server      2                 X-4555 X-1222 name=Sara NA       NA
2 2011  Hardware    3                 X-8922 X-7644 X-6485    NA       NA
3 2015  Software    4                 X-8494 X-4321 X-7452    X-5321   name=John
4 2018  Hardware    2                 X-6901 X-1121 NA       NA       NA 
5 2007  Server      3                 X-7655 X-6555 X-8999    name=Sara    NA",
header = TRUE, stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...