私はデータフレームfooを持っています:
A B C
1 x m 2
2 x n 3
3 x o 11
4 y m 5
5 y o 8
編集:私に思い出させてくれた@akrunに感謝し、このdfを生成するコードを追加します:
foo <- structure(list(A = c("x", "x", "x", "y", "y"),
B = c("m", "n", "o", "m", "o"), C = c(2L, 3L, 11L, 5L, 8L)),
class = "data.frame", row.names = c("1", "2", "3", "4", "5"))
そこから、Aの値を行名、Bの値を列名、エントリとしてCの値を次のように使用して、新しいデータフレームを作成します。
m n o
x 2 3 11
y 5 NA 8
これまでのところ、aggregate()関数を見つけました
aggregate(.~A, foo, FUN=toString)
これは私にこのようなsthを与えます(しかしそれはBの文字を数字に変換します)そして私がここで必要とするものではありません:
A B C
1 x 1,2,3 2,3,11
2 y 1,3 5,8
SOで、同様の問題に対するdplyrパッケージとgroup_byを提案する回答を見つけましたが、これを問題に適応させる方法に頭を悩ませることはできませんでした。私が何かを見落としたら申し訳ありません、何か提案をありがとう!
tidyverse
解決策を追求したい場合は、pivot_wider
から使用できますtidyr
。
編集:column_to_rownames
列Aを行名に移動するために追加されました。
library(tidyverse)
foo %>%
pivot_wider(id_cols = A, names_from = B, values_from = C) %>%
column_to_rownames("A")
出力
m n o
x 2 3 11
y 5 NA 8
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加