在R中操作数据框

时间:2015-01-06 19:07:26

标签: r

我是R.的新人。我有数据框

A 5 8 9 6
B 8 2 3 6
C 1 8 9 5

我想制作

A 5
A 8
A 9
A 6
B 8
B 2
B 3
B 6
C 1
C 8
C 9
C 5

我有一个大数据文件

3 个答案:

答案 0 :(得分:3)

假设你从这样的事情开始:

mydf <- structure(list(V1 = c("A", "B", "C"), V2 = c(5L, 8L, 1L), 
                       V3 = c(8L, 2L, 8L), V4 = c(9L, 3L, 9L), 
                       V5 = c(6L, 6L, 5L)), 
                  .Names = c("V1", "V2", "V3", "V4", "V5"), 
                  class = "data.frame", row.names = c(NA, -3L))
mydf
#   V1 V2 V3 V4 V5
# 1  A  5  8  9  6
# 2  B  8  2  3  6
# 3  C  1  8  9  5

请尝试以下方法之一:

library(reshape2)
melt(mydf, 1)

或者

cbind(mydf[1], stack(mydf[-1]))

或者

library(splitstackshape)
merged.stack(mydf, var.stubs = "V[2-5]", sep = "var.stubs")

最后一个示例中的名称模式不太可能适用于您的实际数据。

答案 1 :(得分:0)

有人可能会以更好的方式做到这一点,但我在这里... 我将您的数据放入名为 data

的数据框中
#repeat the value in the first column (c - 1) times were c is the number of columns (data[1,])
rep(data[,1], each=length(data[1,])-1)

#turning your data frame into a matrix allows you then turn it into a vector...
#transpose the matrix because the vector concatenates columns rather than rows
as.vector(t(as.matrix(data[,2:5])))

#combining these ideas you get...
data.frame(col1=rep(data[,1], each=length(data[1,])-1),
col2=as.vector(t(as.matrix(data[,2:5]))))

答案 2 :(得分:0)

如果您可以使用矩阵,您可以将其“转换”为矢量并添加行名称。我假设你真的想要'a','b','c'作为行名。

n <- 3;
data <- matrix(1:9, ncol = n);
data <- t(t(as.vector(data)));
rownames(data) <- rep(letters[1:3], each = n);

如果你想保留第一个数据框中的rownames,那么在没有库的情况下也可以这样做。

n <- 3;
data <- matrix(1:9, ncol=n);
names <- rownames(data);
data <- t(t(as.vector(data)))
rownames(data) <- rep(names, each = n)