簡體   English   中英

R,根據第二列與向量的匹配值從數據幀列中選擇值

[英]R, select values from data frame column based on matching value in a second column to a 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>

我已將“用戶故事”的唯一值收集到向量中。 (“ abc”,“ efg”,“ hij”)。 假設我已經將此向量創建為“ UserStories”。

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

我想為第一個向量中的每個值創建一個匹配Tasks的向量,最終目標是使用此結構創建第二個數據幀:

<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 hij,7609,NA,NA

我一直在搜尋整個下午,沒有找到方法。

我想將UserStories向量傳遞給一個函數,該函數將為與每個UserStory相關的所有任務提取一系列向量。

在此先感謝所有參加者。

軟件包有很多更好的方法可以做到這一點,但是我總是首先嘗試使用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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM