在列中拆分字符串并计算字符的出现次数

时间:2016-09-19 14:52:09

标签: r

我有一个非常庞大的文件:昏暗的:47,685 x 10,541。在该文件中,第二列中每行的字符之间没有空格,如下所示:

档案#1

Row1 01205201207502102102…..

Row2 20101020100210201022…..

Row3 21050210210001120120…..

我想对该文件做一些统计,可能会删除一些列或行。因此,使用R,我想在第二列中的每两个字符之间添加一个空格,以获得如下内容:

文件#2

Row1 0 1 2 0 5 2 0 1 2 0 7 5 0 2 1 0 2 1 0 2…..

Row2 2 0 1 0 1 0 2 0 1 0 0 2 1 0 2 0 1 0 2 2…..

Row3 2 1 0 0 0 2 1 0 2 1 0 0 0 1 1 2 0 1 2 0…..

然后,在完成编辑后,删除第二列中字符之间的空格,因此最终格式就像File # 1

最好和更快的方法是什么?

1 个答案:

答案 0 :(得分:0)

更新了以解决列数问题。 (来自你的评论)

以下是使用tidyrstringr的解决方案。但是,这会考虑您的字符串与column2的长度相等。该解决方案为您提供行数和列数。这是以非常基本的逐步方式完成的,也可以用几行代码来实现。

library(stringr)
library(tidyr)

data<-data.frame( Column.1 = c("01205", "20705", "27057"),
                  stringsAsFactors = FALSE)

count<-str_count(data$Column.1) # Get the length of the string in column 2
index<-1:count[1] # Generate an index based on the length

# Count the number of 5 and 7 in each string by row and add it as new column
data$Row.count_5 <- str_count(data$Column.1, "5")
data$Row.count_7 <- str_count(data$Column.1, "7")

new.data <- separate(data, Column.1, into = paste("V", 1:count[1], sep = ""), sep = index)
new.data$'NA' <- NULL
new.data

Column_count_5 <- apply(new.data[1:5],2,FUN=function(x) sum(x == 5))
Column_count_7 <- apply(new.data[1:5],2,FUN=function(x) sum(x == 7))
column_count <- as.data.frame(t(data.frame(Column_count_5,Column_count_7)))

library(plyr)
Final.df<- rbind.fill(new.data,column_count)
rownames(Final.df)<-c("Row1","Row2","Row3", "Column.count_5","Column.count_7")
Final.df

输出

                V1 V2 V3 V4 V5 Row.count_5 Row.count_7
Row1            0  1  2  0  5           1           0
Row2            2  0  7  0  5           1           1
Row3            2  7  0  5  7           1           2
Column.count_5  0  0  0  1  2          NA          NA
Column.count_7  0  1  1  0  1          NA          NA

示例数据

data<-data.frame( Column.1 = c("01205", "20705", "27057"),
                  stringsAsFactors = FALSE)