Оставьте первые три символа в каждом столбце набора данных - PullRequest
0 голосов
/ 02 марта 2019
data <- data.frame( ANNO801 = sample(c("1/1:0,10:10:30:1|1:55111119_C_A:450,30,0", "0/0:8,0:8:24:.:.:0,24,282")), ANNO802 = sample(c("1/1:0,5:5:15:1|1:44449611_C_T:225,15,0", "0/0:4,0:4:12:.:.:0,12,165")))

Привет всем,

Итак, я хочу оставить только первые три символа каждого столбца во всем наборе данных.

Я пробовал:

PracticeINV$ANN0801 <- substr(PracticeINV$ANN0801, 0, 3)

Но это работает только в первом столбце.Как мне использовать что-то вроде dplyr или lapply, чтобы автоматизировать это для всего набора данных.

Я не уверен, нужен ли для этого минимальный воспроизводимый пример, но я дам его, если потребуется!

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Использование data.table:

library(data.table)
setDT(df)[, colnames(df) :=  lapply(.SD, function(x) substr(x, 1, 3)),
          .SDcols = colnames(df)][] # you can use .SDcols to specify some columns in you want

Использование dplyr:

library(dplyr)
df %>% mutate_at(vars(colnames(df)), list(~ substr(., 1, 3))) # you can use vars() to specify some columns in you want
0 голосов
/ 02 марта 2019

Вот базовое решение R с lapply.

data2 <- data
data2[] <- lapply(data2[], function(x) substr(x, 1, 3))
data2
#   ANNO801 ANNO802
# 1     1/1     1/1
# 2     0/0     0/0

Решение с использованием dplyr.

library(dplyr)

data2 <- data %>% mutate_all(list(~substr(., 1, 3)))
data2
#   ANNO801 ANNO802
# 1     1/1     1/1
# 2     0/0     0/0

ДАННЫЕ

set.seed(123)

data <- data.frame( ANNO801 = sample(c("1/1:0,10:10:30:1|1:55111119_C_A:450,30,0", "0/0:8,0:8:24:.:.:0,24,282")), ANNO802 = sample(c("1/1:0,5:5:15:1|1:44449611_C_T:225,15,0", "0/0:4,0:4:12:.:.:0,12,165")))
...