这在SQL中已被问及过,但是我找不到在R中简单的方法来实现它。
我有一个像这样的数据集。
我希望根据逗号分割第一列并为每个条目创建一行,重复其余行中的条目。
我编写的函数是:
这个方法可以运行,但速度极慢。有没有一种向量化的方法可以让它更快?我有一个包含5000多行类似数据的文件,运行时间很长。
关于SQL的相关文章: 将值分割成多行 将逗号分隔的字符串转换为单独的行
我有一个像这样的数据集。
Ids v1 v2 v3 v4 v5
548|14721,678|17604,716|18316,732|18505,745|18626,752|18716 9186 639 9045 316 28396
548|14721,678|17603,716|18316,732|18507,745|18626,752|18716 9041 598 8897 283 28054
548|14722,678|17603,716|18316,732|18507,745|18626,752|18716 8799 588 8669 246 27433
548|14721,678|17603,716|18316,732|18505,745|18626,752|18715 8914 614 8765 273 27347
716|18316,745|18626 4113 497 4050 270 27267
548|14722,678|17604,716|18316,732|18507,745|18626,752|18716 8829 589 8713 254 25270
我希望根据逗号分割第一列并为每个条目创建一行,重复其余行中的条目。
我编写的函数是:
split.data <- function(data, split = ",") {
y <- NULL
for( i in 1:nrow(data)){
y <- rbind(y,cbind(data.frame(unlist(strsplit(as.character(data[i,1]), split = split))),data[i,-1]))
}
names(y) <- names(data)
y <- sapply(y,as.character)
return(as.data.frame(y))
}
这个方法可以运行,但速度极慢。有没有一种向量化的方法可以让它更快?我有一个包含5000多行类似数据的文件,运行时间很长。
关于SQL的相关文章: 将值分割成多行 将逗号分隔的字符串转换为单独的行
read.csv
假设从输入的前几行中有5个字段,然后填充任何少于5个的内容。如果大于5,则假定有一个新行。如果您知道ID的最大数量(例如max(sapply(lapply(df$Ids,strsplit,split=','),length))
),则可以将colClasses=rep.int(NA_character,6)
(或最大ID数)作为参数添加到read.csv
中。 - Blue Magisterconcat.split.multiple
现在已更新为cSplit
。 - Hardik Gupta