0

我需要使用 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

小心,format1 中有缺失值,我猜这就是挑战。

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?

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

我对 reshape 和 reshape2 有一点了解,但是,我无法使用它们转换数据格式。

4

2 回答 2

2

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

format1$pk <- cumsum( format1$var=="Id" )
library(reshape2)
dcast( format1, pk ~ var, value.var="num" )
于 2012-01-29T08:24:22.387 回答
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]
于 2012-01-29T08:38:18.390 回答