在数据集中的每一列中保留前三个字符

时间:2019-03-01 22:45:19

标签: r dplyr data.table lapply tidyverse

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 :(得分:2)

使用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

答案 1 :(得分:1)

这是lapply的基本R解决方案。

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")))