簡體   English   中英

加入匹配行的特定列

[英]Join specific columns of matching rows

我有這個數據框:

patientcA   1   2   NA   NA  b   c
patientcB   NA  NA  3     4  b   c
patientdA   3   3   NA   NA  d   e
patientdB   NA  NA  5     6  d   e

如何為第 1 列中匹配的行(最后一個字符除外)連接第 2、3、4 和 5 列。 在這種情況下,除了最后一個字符外,前兩行都匹配; 最后兩行做同樣的事情。 所以我的預期輸出是:

patientcA   1   2   3   4  b   c
patientcB   1   2   3   4  b   c
patientdA   3   3   5   6  d   e
patientdB   3   3   5   6  d   e

我已經嘗試過這樣的事情,但我不知道該寫什么作為else論點。 此外,我認為這不是最好的方法:

new_data$first_column<-ifelse(grepl('A$', original_data$first), original_data$first, ?)

也許你可以考慮tidyverse法,即使用separate把第1列的最后一個字符到一個新的專欄,並fill更換NA針對同一病人的價值觀。

library(tidyverse)

df %>%
  separate(V1, into = c("patient", "letter"), sep = -1) %>%
  group_by(patient) %>%
  fill(V2:V5, .direction = "downup")

輸出

  patient  letter    V2    V3    V4    V5 V6    V7   
  <chr>    <chr>  <int> <int> <int> <int> <chr> <chr>
1 patientc A          1     2     3     4 b     c    
2 patientc B          1     2     3     4 b     c    
3 patientd A          3     3     5     6 d     e    
4 patientd B          3     3     5     6 d     e  

您可以編寫一個像下面的CC()這樣的矢量化函數,它完成列,然后 split-apply-combine with by

CC <- Vectorize(function(x) if (any(is.na(x))) rep(x[!is.na(x)], length(x)) else x)

res <- do.call(rbind.data.frame, by(dat, substr(dat$V1, 8, 8), CC))
res
#            V1 V2 V3 V4 V5 V6 V7
# c.1 patientcA  1  2  3  4  b  c
# c.2 patientcB  1  2  3  4  b  c
# d.1 patientdA  3  3  5  6  d  e
# d.2 patientdB  3  3  5  6  d  e

暫無
暫無

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

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