Как заменить регулярное выражение на di git в кадре данных - PullRequest
4 голосов
/ 27 апреля 2020

У меня есть датафрейм, который включает в себя ряд информации, которая идентифицирует группу людей по их текущему членству в совете. Это выглядит так:

company_board <- c("company1", "company2", "company3; company 1", "", "")
nonprofit_board <- c("nonprofit1", "", "nonprofit5; nonprofit2", "", "nonprofit3")
df <- data.frame(company_board, nonprofit_board, stringsAsFactors = FALSE)

Я хочу преобразовать их в простую 1, если в ячейке есть информация, или 0, если нет записанных данных. Итак, для примера, который я только что привел:

company_board <- c("1", "1", "1", "0", "0")
nonprofit_board <- c("1", "0", "1", "0", "1")
df <- data.frame(company_board, nonprofit_board, stringsAsFactors = FALSE)

Я знаю, как использовать str_extract с [:alnum:], чтобы получить ячейки, которые должны быть 1, но я не могу понять, как затем заменить эти ячейки с 1 (а остальные с 0). Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

2 голосов
/ 27 апреля 2020

Простой способ сделать это - использовать nzchar

dfout <- +data.frame(Map(nzchar,df))

, такой что

> dfout
  company_board nonprofit_board
1             1               1
2             1               0
3             1               1
4             0               0
5             0               1
2 голосов
/ 27 апреля 2020

Мы также можем преобразовать в matrix и применить nchar напрямую

+(nchar(as.matrix(df)) > 0)
#     company_board nonprofit_board
#[1,]             1               1
#[2,]             1               0
#[3,]             1               1
#[4,]             0               0
#[5,]             0               1
2 голосов
/ 27 апреля 2020

Вы можете использовать sapply и проверить, если nchar больше 0.

sapply(df, function(x) +(nchar(x)>0))
#     company_board nonprofit_board
#[1,]             1               1
#[2,]             1               0
#[3,]             1               1
#[4,]             0               0
#[5,]             0               1

или короче:

+(sapply(df, nchar)>0)

В случае, если у вас " " Вы можете добавить что-то вроде trimws:

sapply(df, function(x) +(nchar(trimws(x))>0))

Или использовать nzchar, уже замеченный в ответе @ ThomasIsCoding.

+sapply(df, nzchar)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...