我有这个数据框:
freq 1 2 3 4
1 100 10 20 30 40
2 100 0.50 1.00 1.5 2
3 200 50 60 70 80
4 200 2.5 3 3.5 4
我想以这种方式改变这个数据框架:
freq 1 2
1 100 10 0.50
2 100 20 1
3 100 30 1.50
4 100 40 2
5 200 50 2.50
6 200 60 3
7 200 70 3.50
8 200 80 4
我该怎么做?
我需要为通用数据帧运行的东西,而不仅仅是这种情况。
答案 0 :(得分:3)
我们可以尝试
i1 <- c(TRUE, FALSE)
data.frame(freq = rep(df1$freq, each =(ncol(df1)-1)/2),
`1` = c(t(df1[i1,-1])), `2` = c(t(df1[!i1,-1])), check.names=FALSE)
# freq 1 2
#1 100 10 0.5
#2 100 20 1.0
#3 100 30 1.5
#4 100 40 2.0
#5 200 50 2.5
#6 200 60 3.0
#7 200 70 3.5
#8 200 80 4.0
答案 1 :(得分:2)
或者
cbind(
freq = rep(unique(df$freq), each=ncol(df[, -1])),
do.call(rbind, lapply(split(df[, -1], df$freq), function(x) t(x)))
)
# freq 1 2
# 1 100 10 0.5
# 2 100 20 1.0
# 3 100 30 1.5
# 4 100 40 2.0
# 1 200 50 2.5
# 2 200 60 3.0
# 3 200 70 3.5
# 4 200 80 4.0