作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个这样的文本数据文件(各个类别 [A,B,C] 有多行):
A=1,2,3,6,
7,9
10
B=3,4,5
C=5,7,8,10,11,
13,14
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
最佳答案
基本方法是将数据作为字符串读取,在 =
上拆分。和 ,
,然后找出识别每个数字属于哪个组的最佳方法。
在以下方法中,我有意使用类型转换来创建组。由于这将涉及从字符到数字的强制转换,因为拆分值中有字符,所以会出现一些警告消息。
# Load the data.table package.
library(data.table)
# Read in the data.
x <- fread("A=1,2,3,6,
7,9
10
B=3,4,5
C=5,7,8,10,11,
13,14", 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
cSplit
的另一种选择来自我的“splitstackshape”包。 “x”是使用
fread
读取的相同数据.
library(splitstackshape)
cSplit(
cSplit(x[, toString(V1), cumsum(grepl("[A-Z]", V1))], "V1", "="), "V1_2", ",", "long")[
, dcast(.SD, V1_2 ~ V1_1, value.var = "V1_1", fill = "")]
关于r - 在 R 中将行拆分为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59133299/
我是一名优秀的程序员,十分优秀!