Добавление столбцов и имен столбцов динамически - PullRequest
0 голосов
/ 11 ноября 2018

У меня R data.table вот так:

id
1:  1
2: 29
3: 26
4:  6
5:  1
6: 14`

И я бы хотел динамически добавлять столбцы при наличии этого Id в строке.Результат:

    id is_present_1 ... is_present_6....
1:  1            1                 0
2:  2            0                 0
3:  3            0                 0
4:  4            0                 1
5:  5            0                 0
6:  6            0                 1 

Я пытался написать функцию или с помощью mutate и paste:

ids <- c(1, 2, 3, 4, 5, 6)
for (i in length(ids)) {
df %>% mutate(paste("is_present",id[i]) = ifelse(id == ids[i],1,0))}

Я получил ошибку:

Ошибка: неожиданная'=' in: "for (длина i (ids)) {df%>% mutate (paste (" is_present ", id [i]) ="

Может кто-нибудь помочь с этим?

1 Ответ

0 голосов
/ 12 ноября 2018

Не уверен, что понимаю вопрос. Но я думаю, что вы ищете функцию карты от мурлыканья с динамическими именами столбцов. Если логика неверна, вы можете просто настроить ее внутри функции.

library(tidyverse)
library(data.table)

map_dfc(df$row, function(x){
nm <- paste("is_present_", x, sep = "")
  df %>% 
    mutate(!!nm := ifelse(id == x, 1, 0))}) %>% 
  select(contains("is_present_"))

Результат:

  is_present_1 is_present_2 is_present_3 is_present_4 is_present_5 is_present_6
1            1            0            0            0            0            0
2            0            0            0            0            0            0
3            0            0            0            0            0            0
4            0            0            0            0            0            1
5            1            0            0            0            0            0
6            0            0            0            0            0            0

Пример данных:

    df <- fread("
    id 
1:  1
2: 29
3: 26
4:  6
5:  1
6: 14") %>% 
  select(2) %>%  
  rownames_to_column("row")
...