2017-06-23 10 views
0

に第二列の値の一致に基づいてデータフレーム列から値を選択私はこのようなデータ・フレームを有する:R、ベクトル

<table> 
    <tr><td>Task</td><td>UserStory</td><tr> 
    <tr><td>123</td><td>abc</td><tr> 
    <tr><td>4321</td><td>abc</td><tr> 
    <tr><td>8763</td><td>abc</td><tr> 
    <tr><td>9087</td><td>efg</td><tr> 
    <tr><td>0652</td><td>efg</td><tr> 
    <tr><td>7609</td><td>hij</td><tr> 
</table> 

Iは、ベクター中にユーザストーリーのためのユニークな値を収集しています。 (「abc」、「efg」、「hij」)。私はこのベクトルを "UserStories"として作成したとしましょう。

UserStories <- c("abc", "efg", "hij") 

私はこのような構造を有する第二のデータフレームを作成する最終的な目的で、第一のベクトルの各値に対してタスクをマッチングベクトルを作成したい:

<table> 
    <tr><td>abc</td><td>1234</td><td>4321</td><td>8763</td><tr> 
    <tr><td>efg</td><td>9087</td><td>0652</td><td>NA</td><tr> 
    <tr><td>hij</td><td>609</td><td>NA</td><td>NA</td><tr> 
</table> 

Iは、次いで、考え

ABC、1234、4321、8763 EFG、9087、0652、NA HIJ、7609、NA、NA

:私はNAの欠損値を埋めしたら第二のデータフレームにそれらをrbind'ing 210

私はすべての午後に、アプローチを見つけることなくグーグルで行ってきました。

私はUserStoriesベクトルを、各UserStoryに関連付けられたすべてのタスクの一連のベクトルを抽出する関数に渡したいと考えています。

ありがとうございます。

答えて

1

は、これを行うためのパッケージとのより良い方法がありますが、私は常に第一基Rのコードを試してみてください。

df <- data.frame(Task = c(123,4321,8763,9087,0652,7609), UserStory = c("abc","abc","abc","efg","efg","hij")) 
# Splitting 
df.split <- split(df$Task, df$UserStory) 
# Combining 
maxLength <- max(rapply(df.split, length)) 
# initialize 
new <- list() 
z <- NULL # hold the object for length editing to include NAs 
for(i in 1:length(df.split)){ 
    z <- df.split[[i]] 
    length(z) <- maxLength # edit the length 
    new[[i]] <- c(names(df.split)[i], z) 
} 
final <- as.data.frame(do.call(rbind,new)) 
final 
# V1 V2 V3 V4 
#1 abc 123 4321 8763 
#2 efg 9087 652 <NA> 
#3 hij 7609 <NA> <NA> 
+0

ありがとうございます!私もベースRを使用することを好む。それは、私に、例えばdplyrを使用することと比較して何が起こっているのかを理解しているという錯覚を与える。私はあなたのソリューションを使い始めるでしょう。 –

+0

質問がある場合はお知らせください –