R 如何重塑文本文件?

R 如何重塑文本文件?,r,dataframe,reshape,R,Dataframe,Reshape,我有一个像这样的文件,我想重塑并转换为列: 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 &

我有一个像这样的文件,我想重塑并转换为列:

   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

我们通过转换为
矩阵
,然后转换为
data.frame
,然后
取消堆叠
并转置来重塑列“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

d1我们通过转换为
矩阵
,然后转换为
data.frame
,然后
取消堆叠
和转置来重塑列“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
d1另一个选项:

# 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")

作为第2步的备选方案,您还可以使用
数据表
-包:

# 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')
这将返回一个data.table(一个增强的data.frame),其结构与基本R解决方案相同。

另一个选项:

# 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")

作为第2步的备选方案,您还可以使用
数据表
-包:

# 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')

这将返回一个data.table(这是一个增强的data.frame),其结构与基本R解决方案相同。

data.table的版本是什么?此函数在v1.9.8及更高版本中提供。@bicton使用完整的base R解决方案查看更新;对于第二步的
数据.table
-备选方案,您可能需要将
数据.table
-包更新到最新版本(当前为v1.10.4)。数据的版本是什么。table
您有吗?此函数在v1.9.8及更高版本中提供。@bicton使用完整的base R解决方案查看更新;对于第二步的
data.table
-备选方案,您可能需要将
data.table
-包更新到最新版本(当前为v1.10.4)