2016-05-04 6 views
2

私はこのデータフレームを持っている:一般的なデータフレームを有効にするには?

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 

私はそれをどのように行うことができますか?

このケースだけでなく、一般的なデータフレームで動作するものが必要です。

+1

を試すことができます。 –

答えて

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 
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 
関連する問題