gpt4 book ai didi

r - 在 R 中将行拆分为列

转载 作者:行者123 更新时间:2023-12-01 08:21:23 24 4
gpt4 key购买 nike

我有一个这样的文本数据文件(各个类别 [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 个 obs 的数据框。和 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

谢谢!

最佳答案

基本方法是将数据作为字符串读取,在 = 上拆分。和 , ,然后找出识别每个数字属于哪个组的最佳方法。

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

# 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com