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之类的工具来自动化整个数据集。
我不确定这是否需要一个最小的可重现示例,但是如果需要的话,我会举一个例子!
谢谢您的帮助!
答案 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")))