簡體   English   中英

如何將具有相同rowname的行合並為一個

[英]How to merge rows with the same rowname into one

我有以下數據框:

product<-c("ab","ab","ab","ac","ac")
HD<-c("12","","","","")
HS<-c("","23","","","")
HR<-c("","","34","","")
HO<-c("","","","23","")
DF<-c("","","","","24")
store22<-data.frame(product,HD,HS,HR,HO,DF)



product HD HS HR HO DF
1      ab 12            
2      ab    23         
3      ab       34      
4      ac          23   
5      ac             24

我傾向於以一種我只保留product的唯一值的方式對其進行轉換,因此將值放在同一行中,如下所示:

product HD HS HR HO DF
1      ab 12 23 34      
2      ac          23 24
product<-c("ab","ab","ab","ac","ac")
HD<-c("12","","","","")
HS<-c("","23","","","")
HR<-c("","","34","","")
HO<-c("","","","23","")
DF<-c("","","","","24")
store22<-data.frame(product,HD,HS,HR,HO,DF)

library(tidyverse)

store22 %>%
  mutate(product = as.character(product)) %>% # update to character variable
  gather(x,y,-product) %>%                    # reshape data
  filter(y != "") %>%                         # exclude rows where y is empty
  spread(x,y, fill="")                        # reshape again and replace NAs with empty values

#   product DF HD HO HR HS
# 1      ab    12    34 23
# 2      ac 24    23 

data.table

data.table::setDT(store22)[,lapply(.SD,function(x){na.omit(as.numeric(as.character(x)))}),by="product"]

#   product HD HS HR HO DF
#1:      ab 12 23 34 NA NA
#2:      ac NA NA NA 23 24

我們可以在字符變量上使用max

library(dplyr)

store22 %>%
  group_by(product) %>%
  summarize_all(~max(as.character(.)))

輸出:

# A tibble: 2 x 6
  product HD    HS    HR    HO    DF   
  <fct>   <chr> <chr> <chr> <chr> <chr>
1 ab      12    23    34    ""    ""   
2 ac      ""    ""    ""    23    24 

暫無
暫無

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

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