如何转换通用数据框?

时间:2016-05-04 09:30:51

标签: r dataframe

我有这个数据框:

  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

我该怎么做?

我需要为通用数据帧运行的东西,而不仅仅是这种情况。

2 个答案:

答案 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