Перебирайте столбцы и добавляйте длины строк как новые столбцы

Для управления несколькими сеансами (на основе каждого каталога / репо) я недавно переключился с плагина vim-session на vim-workspace . Его управление сеансом относительно простое и работает очень хорошо.

29
задан eli-k 24 July 2018 в 11:39
поделиться

4 ответа

Вам необходимо использовать [[, программный эквивалент $. В противном случае, например, когда i равно col1, R будет искать df$i вместо df$col1.

for(i in names(df)){
  df[[paste(i, 'length', sep="_")]] <- str_length(df[[i]])
}
68
ответ дан flodel 24 July 2018 в 11:39
поделиться

С помощью dplyr и stringr вы можете использовать mutate_all :

> df %>% mutate_all(funs(length = str_length(.)))

     col1     col2 col1_length col2_length
1     abc adf qqwe           3           8
2    abcd        d           4           1
3       a        e           1           1
4 abcdefg        f           7           1
6
ответ дан Jaap 24 July 2018 в 11:39
поделиться

Вы можете использовать lapply, чтобы передать каждый столбец в str_length, а затем cbind в исходный data.frame ...

library(stringr)

out <- lapply( df , str_length )    
df <- cbind( df , out )

#     col1     col2 col1 col2
#1     abc adf qqwe    3    8
#2    abcd        d    4    1
#3       a        e    1    1
#4 abcdefg        f    7    1
10
ответ дан zx8754 24 July 2018 в 11:39
поделиться

Для полноты картины существует также data.table решение:

library(data.table)
result <- setDT(df)[, paste0(names(df), "_length") := lapply(.SD, stringr::str_length)]
result
#      col1     col2 col1_length col2_length
#1:     abc adf qqwe           3           8
#2:    abcd        d           4           1
#3:       a        e           1           1
#4: abcdefg        f           7           1
3
ответ дан Uwe 24 July 2018 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: