R,根据第二列中的匹配值到向量

时间:2017-06-23 21:37:23

标签: r select dataframe vector

我有一个这样的数据框:

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

我已将用户素材的唯一值收集到矢量中。 (&#34; abc&#34;,&#34; efg&#34;,&#34; hij&#34;)。让我们说我已经创建了这个向量作为&#34; UserStories&#34;。

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>

当我用NA填充缺失值时,我想到了rbind将它们放到第二个数据框中:

abc,1234,4321,8763 efg,9087,0652,NA hij,7609,NA,NA

我整个下午一直在谷歌搜索而没有找到方法。

我希望将UserStories向量传递给一个函数,该函数将为与每个UserStory关联的所有任务提取一系列向量。

提前感谢任何参与者。

1 个答案:

答案 0 :(得分: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>