将行拆分为R中的列

问题描述 投票:2回答:1

我有一个这样的文本数据文件(相应的类别[A,B,C]具有多行):

A=1,2,3,6,
7,9
10
B=3,4,5
C=5,7,8,10,11,
13,14

当我加载到R时,它将变成一个6磅的数据帧。和1个变量

df <- read.delim("file.text",header = FALSE)

    v1
1   A=1,2,3,6,
2   7,9
3   10
4   B=3,4,5
5   C=5,7,8,10,11,
6   13,14

如何更改为这种格式?

   A  B  C
1  A
2  A
3  A  B
4     B
5     B  C
6  A
7  A     C
8        C
9  A
10 A     C
11       C
13       C
14       C

谢谢!

r reshape melt
1个回答
1
投票

[基本方法是以字符串形式读取数据,在=,上分开,然后找出识别每个数字所属的组的最佳方法。

在以下方法中,我故意使用类型转换来创建组。由于这将涉及从字符到数字的强制转换,因为拆分值中包含字符,所以会出现几条警告消息。

library(data.table)
x <- fread(file = "~/path/to/your/file.txt", sep = "\n", header = FALSE)
x[, unlist(strsplit(V1, "=|,"), use.names = FALSE, recursive = FALSE), .I][
  , list(ind = as.integer(V1), col = rep(V1[1], .N)), cumsum(is.na(as.integer(V1)))][
    , dcast(na.omit(.SD), ind ~ col, value.var = "col", fill = "")]
#     ind A B C
#  1:   1 A    
#  2:   2 A    
#  3:   3 A B  
#  4:   4   B  
#  5:   5   B C
#  6:   6 A    
#  7:   7 A   C
#  8:   8     C
#  9:   9 A    
# 10:  10 A   C
# 11:  11     C
# 12:  13     C
# 13:  14     C
© www.soinside.com 2019 - 2024. All rights reserved.