如何将分离应用于R中具有相同操作的多个列?
我想用“-”将一列分隔成4列,保留新的4列,删除原始列,重命名新的4列。然后对几个柱应用相同的操作 我用了一种愚蠢的方法…我试图用如何将分离应用于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车
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),])。很抱歉回复太晚,请注意,谢谢您的建议。