使用R将列值转换为行名称

时间:2012-01-29 07:43:00

标签: r reshape

我需要使用R.

将列值转换为行名称

例如,将format1转换为format2

var<-c("Id", "Name", "Score", "Id", "Score", "Id", "Name")
num<-c(1, "Tom", 4, 2, 7, 3, "Jim")
format1<-data.frame(var, num)

format1

    var num
1    Id   1
2  Name Tom
3 Score   4
4    Id   2
5 Score   7
6    Id   3
7  Name Jim

小心,格式1中缺少值,这就是挑战,我想。

Id<-c(1, 2, 3)
Name<-c("Tom", NA, "Jim")
Score<-c(4, 7, NA)
format2<-data.frame(Id, Name, Score)

format2

  Id Name Score
1  1  Tom     4
2  2 <NA>     7
3  3  Jim    NA

# How to convert format1 into format2?

我可能不会以确切的方式表达,但是,您可以参考我上面给出的玩具数据。

我知道有关重塑和重塑2的垃圾,但是,我无法使用它们转换数据格式。

2 个答案:

答案 0 :(得分:2)

添加标识符列后,您可以使用dcast

format1$pk <- cumsum( format1$var=="Id" )
library(reshape2)
dcast( format1, pk ~ var, value.var="num" )

答案 1 :(得分:2)

format1$ID <- cumsum(format1$var == "Id")
format2 <- reshape(format1, idvar = "ID",timevar = "var", direction = "wide")[-1]
names(format2) <- gsub("num.", "", names(format2)
#   Id Name Score
# 1  1  Tom     4
# 4  2 <NA>     7
# 6  3  Jim  <NA>

或者,如果您想跳过gsub()步骤,可以通过varying参数直接指定输出列名称:

reshape(format1, idvar = "ID",timevar = "var", direction = "wide",
        varying = list(c("Id", "Name", "Score")))[-1]