Для управления несколькими сеансами (на основе каждого каталога / репо) я недавно переключился с плагина vim-session на vim-workspace . Его управление сеансом относительно простое и работает очень хорошо.
Вам необходимо использовать [[
, программный эквивалент $
. В противном случае, например, когда i
равно col1
, R будет искать df$i
вместо df$col1
.
for(i in names(df)){
df[[paste(i, 'length', sep="_")]] <- str_length(df[[i]])
}
С помощью 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
Вы можете использовать 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
Для полноты картины существует также 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