【问题标题】:R, select values from data frame column based on matching value in a second column to a vectorR,根据第二列与向量的匹配值从数据框列中选择值
【发布时间】:2017-06-23 21:37:22
【问题描述】:

我有一个这样的数据框:

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

我已将用户故事的唯一值收集到一个向量中。 (“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>

一旦我用 NA 填充了缺失值,我就会考虑将它们重新绑定到第二个数据帧中:

abc, 1234, 4321, 8763 EFG, 9087, 0652, NA 嗨,7609,北美,北美

我整个下午都在谷歌上搜索,但没有找到方法。

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

提前感谢任何接受者。

【问题讨论】:

    标签: r select dataframe vector


    【解决方案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>
    

    【讨论】:

    • 谢谢!我也更喜欢使用 base R。与使用 dplyr 相比,它给了我一种我理解正在发生的事情的错觉。我将开始使用您的解决方案。
    • 如果您有任何问题,请告诉我
    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多