如何重塑文本文件?
How to reshape a text file?
我有一个这样的文件,我想将其重塑并转换为列:
fe=read.table("foo.txt")
> fe
V1
1 9
2 Sd
3 2
4 Sd
5 5
6 Smn
7 7
8 Smn
9 5
10 bf
11 4
12 bf
> str(fe)
'data.frame': 12 obs. of 1 variable:
$ V1: Factor
期望的输出:
Sd 9 2
Smn 5 7
bf 5 4
我们通过转换为 matrix
,然后转换为 data.frame
,然后转换为 unstack
并转置以获得预期的输出
来重塑列 'V1'
d1 <- as.data.frame(matrix(fe$V1, ncol=2, byrow = TRUE))
d1$V1 <- as.integer(as.character(d1$V1))
res <- t(unstack(d1, V1~V2))
res
# [,1] [,2]
#bf 5 4
#Sd 9 2
#Smn 5 7
另一个选项:
# step 1: create new dataframe
fe2 <- data.frame(id = fe$V1[c(FALSE,TRUE)],
num = as.numeric(as.character(fe$V1[c(TRUE,FALSE)])))
# step 2: reshape into the desired format
fe2$rid <- with(fe2, ave(as.character(id), id, FUN = seq_along))
reshape(fe2, idvar = "id", timevar = "rid", direction = "wide")
其中 return 是 data.frame:
id num.1 num.2
1 Sd 9 2
3 Smn 5 7
5 bf 5 4
作为步骤 2 的替代方案,您还可以使用 data.table
-package:
# step 2 (alternative): reshape into the desired format
library(data.table) # v1.9.8 or higher is required for the 'rowid'-function
dcast(setDT(fe2), id ~ rowid(id, prefix = 'num.'), value.var = 'num')
这将return一个data.table(这是一个增强的data.frame)与基础 R 解决方案的结构相同。
我有一个这样的文件,我想将其重塑并转换为列:
fe=read.table("foo.txt")
> fe
V1
1 9
2 Sd
3 2
4 Sd
5 5
6 Smn
7 7
8 Smn
9 5
10 bf
11 4
12 bf
> str(fe)
'data.frame': 12 obs. of 1 variable:
$ V1: Factor
期望的输出:
Sd 9 2
Smn 5 7
bf 5 4
我们通过转换为 matrix
,然后转换为 data.frame
,然后转换为 unstack
并转置以获得预期的输出
d1 <- as.data.frame(matrix(fe$V1, ncol=2, byrow = TRUE))
d1$V1 <- as.integer(as.character(d1$V1))
res <- t(unstack(d1, V1~V2))
res
# [,1] [,2]
#bf 5 4
#Sd 9 2
#Smn 5 7
另一个选项:
# step 1: create new dataframe
fe2 <- data.frame(id = fe$V1[c(FALSE,TRUE)],
num = as.numeric(as.character(fe$V1[c(TRUE,FALSE)])))
# step 2: reshape into the desired format
fe2$rid <- with(fe2, ave(as.character(id), id, FUN = seq_along))
reshape(fe2, idvar = "id", timevar = "rid", direction = "wide")
其中 return 是 data.frame:
id num.1 num.2 1 Sd 9 2 3 Smn 5 7 5 bf 5 4
作为步骤 2 的替代方案,您还可以使用 data.table
-package:
# step 2 (alternative): reshape into the desired format
library(data.table) # v1.9.8 or higher is required for the 'rowid'-function
dcast(setDT(fe2), id ~ rowid(id, prefix = 'num.'), value.var = 'num')
这将return一个data.table(这是一个增强的data.frame)与基础 R 解决方案的结构相同。