我是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
我有一个大数据文件
答案 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)