如何将分离应用于R中具有相同操作的多个列?

如何将分离应用于R中具有相同操作的多个列?,r,R,我想用“-”将一列分隔成4列,保留新的4列,删除原始列,重命名新的4列。然后对几个柱应用相同的操作 我用了一种愚蠢的方法…我试图用separate和paste编写函数,但失败了 R代码如下: 表格% 分离(“A3驾驶室PA”,分为=c(“A3驾驶室PA计数”、“A3驾驶室PA sumkm”、“A3驾驶室PA驱动”、“A3驾驶室PA驱动2”),sep=“-”%>% 将(“A4所有道路B9”分为=c(“A4所有道路B9计数”、“A4所有道路B9总计”、“A4所有道路B9总计”、“A4所有道路B9车

我想用“-”将一列分隔成4列,保留新的4列,删除原始列,重命名新的4列。然后对几个柱应用相同的操作

我用了一种愚蠢的方法…我试图用
separate
paste
编写函数,但失败了

R代码如下:

表格%
分离(“A3驾驶室PA”,分为=c(“A3驾驶室PA计数”、“A3驾驶室PA sumkm”、“A3驾驶室PA驱动”、“A3驾驶室PA驱动2”),sep=“-”%>%
将(“A4所有道路B9”分为=c(“A4所有道路B9计数”、“A4所有道路B9总计”、“A4所有道路B9总计”、“A4所有道路B9车道”、“A4所有道路B9车道2”)、sep=“-”%>%
分离(“A5敞篷车B9”,分为=c(“A5敞篷车B9计数”、“A5敞篷车B9 sumkm”、“A5敞篷车B9驾驶”、“A5敞篷车B9驾驶2”),sep=“-”%>%
等等


是否可以定义一个
函数(x)
并使用
lappy(数据[,-1],函数(x))
替换上面的长代码?

我用您的结构制作了一个数据示例

library(tidyr) 

A <- c("7-4-5-9", NA) 
B <- c("6-4-5-1", "7-8-6-3") 
dat <- data.frame(A,B, stringsAsFactors = FALSE) #example data

for (col in names(dat)){  # you will propably need to assign a subset of columns with something like wanted_cols %in% names(dat))  

    namecol1 <- paste(col, "count", sep ="_") 
    namecol2 <- paste(col, "sumkm", sep ="_") 
    namecol3 <- paste(col, "drive", sep ="_") 
    namecol4 <- paste(col, "drive2", sep ="_") #set the wanted column structure
    cols <- rlang::sym(col) 

    dat <- dat %>% separate(!!cols, into = c(namecol1, namecol2, namecol3, namecol4), sep = "-", remove = TRUE) # separate and remove the original column 
} 
library(tidyr)

A我用你的结构做了一个数据样本

library(tidyr) 

A <- c("7-4-5-9", NA) 
B <- c("6-4-5-1", "7-8-6-3") 
dat <- data.frame(A,B, stringsAsFactors = FALSE) #example data

for (col in names(dat)){  # you will propably need to assign a subset of columns with something like wanted_cols %in% names(dat))  

    namecol1 <- paste(col, "count", sep ="_") 
    namecol2 <- paste(col, "sumkm", sep ="_") 
    namecol3 <- paste(col, "drive", sep ="_") 
    namecol4 <- paste(col, "drive2", sep ="_") #set the wanted column structure
    cols <- rlang::sym(col) 

    dat <- dat %>% separate(!!cols, into = c(namecol1, namecol2, namecol3, namecol4), sep = "-", remove = TRUE) # separate and remove the original column 
} 
library(tidyr)

A@ArielZhang您的问题很好,因为将dplyr和循环/函数关联起来并不总是那么简单。但在将来,如果能共享您的数据样本,有人可以直接复制到他们的控制台中,那将是非常好的。通常的方法是复制dput的输出(您的数据[c(1:10),])。很抱歉回复太晚,请注意,谢谢您的建议。@ArielZhang您的问题很好,因为将dplyr和循环/函数关联起来并不总是那么简单。但在将来,如果能共享您的数据样本,有人可以直接复制到他们的控制台中,那将是非常好的。通常的方法是复制dput的输出(yourdata[c(1:10),])。很抱歉回复太晚,请注意,谢谢您的建议。