簡単な質問を逆転(または溶液見つける)ことができません:私はこれを逆にし、元DFの裏を取得できますかRは - 私は自分自身を解決することができませんでした溶融
df <- data.frame(A1 = sample(1:100, 10, replace = TRUE), A2 = sample(1:100, 10, replace = TRUE))
molten <- melt(df)
を?私のためには、キャストもキャストも機能しません。
簡単な質問を逆転(または溶液見つける)ことができません:私はこれを逆にし、元DFの裏を取得できますかRは - 私は自分自身を解決することができませんでした溶融
df <- data.frame(A1 = sample(1:100, 10, replace = TRUE), A2 = sample(1:100, 10, replace = TRUE))
molten <- melt(df)
を?私のためには、キャストもキャストも機能しません。
あなたは溶融状態に既にある場合は、最初の変数
df$id <- 1:nrow(df)
molten <- melt(df, id.var="id")
dcast(molten, id~variable)
を構築し、ID場合は、行が適切にソートされていることを、あなたの例からの通知、動作します。あなたはrep
でIDを構築するためにこれを利用することができます
molten$id <- rep(1:(nrow(molten)/2), 2)
そして、上記dcast
方法で動作します。もちろん、溶かされた変数は3つ以上あるかもしれません。このIDの作成は、2つのかなり大規模な仮定に依存していることを
molten$id <- rep(1:(nrow(molten)/length(unique(variable))),
length(unique(variable)))
注:
rep
を一般化することができます。melt
の欠損値は削除されませんでした。table
を使用して2番目の問題を部分的にテストできます。 「可変」のすべてのレベルが同じ長さであることを視覚的にチェックする。これは愚かな証拠ではありませんが、かなり良い指標です。
ありがとう@ user20650。このシナリオを下に追加しましたが、一般化すると思います。 – lmo
しかし、グッドなことには、各グループに番号が不揃いであれば問題になるかもしれないと思います(溶融の後に試してみてください)。 私の気持ちは 'ave'と' seq_along'と一緒に行く感じです。 – user20650
私は同意します。しかし、その時点では、「ワイド」操作の観察結果を一致させることは不可能ではないにしても、困難である。溶かしたデータを作成したユーザーが表示される前にすべてのNAsを削除した場合、この操作は危険です。たぶん私はそれを言及する必要があります。 – lmo
これは簡単にunstack
unstack(molten, value~variable)
# A1 A2
#1 49 46
#2 51 75
#3 41 27
#4 75 4
#5 91 79
#6 19 87
#7 24 18
#8 96 57
#9 87 42
#10 8 47
で行うことができるか、別のオプションは、
library(dplyr)
library(tidyr)
molten %>%
group_by(variable) %>%
mutate(n = row_number()) %>%
spread(variable, value) %>%
select(-n)
# A1 A2
# <int> <int>
#1 49 46
#2 51 75
#3 41 27
#4 75 4
#5 91 79
#6 19 87
#7 24 18
#8 96 57
#9 87 42
#10 8 47
最初のものは等しい長さの変数でしか動作しませんが、2番目のものはうまく動作します! –
@GeoVoglerはい、そうです。あなたの例は等しい長さに基づいていました。それが私が 'unstack'を追加した理由です – akrun
http://stackoverflow.com/questions/25935706シーケンス列を作成した後
tidyr
からspread
です/ how-to-unmelt-data-with-reshape-r – user20650私の答えはうまくいきますか、それともあなたが既に溶融状態にあるのでしょうか? – lmo
それはうまくいくだろうが、user20650によってコメントされているように - 私はすでにdfを持たずに溶融状態になっている。 –