![](/img/trans.png)
[英]How to merge rows of binary matrix based on substring rowname matches?
[英]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.