我的文本文件如下:
22 16050115 0|0:404
22 16050213 0|0:403 1|0:1
22 16050607 0|0:400 0|1:2 1|0:2
22 16050739 0|0:403 1|0:1
22 16050783 0|0:404
22 16050840 0|0:391 0|1:9 1|0:4
22 16050847 0|0:402 1|0:2
22 16050922 0|0:404
22 16050984 0|0:404
22 16051075 0|0:404
22 16051249 0|0:333 0|1:31 1|0:37 1|1:3
22 16051722 0|0:404
22 16051874 0|0:404
22 16051927 0|0:404
22 16052080 0|0:316 0|1:37 1|0:51
22 16052097 0|0:404
22 16052167 0|0:177 0|1:80 1|0:85 1|1:62
22 16052240 0|0:404
我想将所有列一起字符串拆分。我可以使用
一栏x <- strsplit(as.character(data), ":")
x<-unlist(x)
但是无法对所有列进行操作。
预期输出:
A B C D E F G H I J
22 16050115 0|0 404
22 16050213 0|0 403 1|0 1
22 16050607 0|0 400 0|1 2 1|0 2
22 16050739 0|0 403 1|0 1
22 16050783 0|0 404
22 16050840 0|0 391 0|1 9 1|0 4
22 16050847 0|0 402 1|0 2
22 16050922 0|0 404
22 16050984 0|0 404
22 16051075 0|0 04
22 16051249 0|0 333 0|1 31 1|0 37 1|1 3
22 16051722 0|0 404
22 16051874 0|0 404
22 16051927 0|0 404
22 16052080 0|0 316 0|1 37 1|0 51
22 16052097 0|0 404
22 16052167 0|0 177 0|1 80 1|0 85 1|1 62
22 16052240 0|0 404
感谢任何帮助。
答案 0 :(得分:1)
我们可以使用purrr::map
library(purrr)
map(df$A, function(x) { unlist(strsplit(x,split=':|\\s+'))}) %>%
map_df( ~ data_frame(A = .x[1],B=.x[2],C=.x[3],D=.x[4],E=.x[5],F=.x[6],G=.x[7],H=.x[8],I=.x[9],K=.x[10]))
# A tibble: 4 x 10
A B C D E F G H I K
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 22 16050115 0|0 404 NA NA NA NA NA NA
2 22 16050213 0|0 403 1|0 1 NA NA NA NA
3 22 16050840 0|0 391 0|1 9 1|0 4 NA NA
4 22 16052167 0|0 177 0|1 80 1|0 85 1|1 62
数据
structure(list(A = c("22 16050115 0|0:404", "22 16050213 0|0:403 1|0:1",
"22 16050840 0|0:391 0|1:9 1|0:4", "22 16052167 0|0:177 0|1:80 1|0:85 1|1:62"
)), .Names = "A", row.names = c(NA, -4L), class = "data.frame")
答案 1 :(得分:0)
假设这是您的数据
example = data.frame(ID = c(1,2,3),FO = c("Jim","Jim","Jim"),A = c("Y:401","Z:506","L:405"),
B = c("T:402","X:501","A:"),
C = c("Y:112","L:506",":908"),stringsAsFactors = F)
> example
ID FO A B C
1 1 Jim Y:401 T:402 Y:112
2 2 Jim Z:506 X:501 L:506
3 3 Jim L:405 A: :908
下面显示了一次将一个数据帧中的多列拆分的简单方法
library(dplyr)
library(tidyverse)
example %>%
gather(key, value, -ID,-FO) %>%
separate_rows(value, sep = ":") %>%
group_by(key, ID) %>%
mutate(key2 = paste0(key, "_", seq_along(key))) %>%
ungroup() %>%
select(-key) %>%
spread(key2, value)
# A tibble: 3 x 8
ID FO A_1 A_2 B_1 B_2 C_1 C_2
<dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 Jim Y 401 T 402 Y 112
2 2 Jim Z 506 X 501 L 506
3 3 Jim L 405 A "" "" 908
希望这会有所帮助,请在查询之前添加示例数据。谢谢