首页 > 解决方案 > 如何在一个数据框中组合特定的行

问题描述

如何在一个数据框中组合两个特定行?

例如我想专门合并 A 和 Ab 行,而不是其他行。

姓名 X 是的 z
一个。 C 不适用 n
抗体 不适用 r ķ
C。 w

我正在寻找的结果

姓名 X 是的 z
一个。 C r n
C。 w

我的数据集示例如下,我想将“aring”与“aring a”、“aring b”与“aring b - kelantan”结合起来:

t1 <- structure(list(name = c("archipelago", "arindo trisejahtera tg malim", 
"aring", "aring a", "aring b", "aring b kelantan"), `Mill ID` = c("4696", 
"3410", NA, "3432", "4328", NA), `Mill name.x` = c("archipelago", 
"arindo trisejahtera (tg malim)", "aring", "aring a", "aring b", 
"aring b - kelantan"), `Mill name.y` = c("archipelago", "arindo tri sejahtera", 
NA, NA, NA, NA), Latitude = c("-1.1395200000000001", "0.58055999999999996", 
NA, "4.9408300000000001", "4.9363999999999999", NA), Latitude.x = c(-1.1395156, 
0.580944444, 4.940494, Inf, Inf, 4.9364), Latitude.y = c("-1.1395200000000001", 
"0.58055999999999996", NA, NA, NA, NA), Longitude = c("113.98648", 
"100.92610999999999", NA, "102.36417", "102.4256", NA), Longitude.x = c(113.9864769, 
100.9246944, 102.362839, Inf, Inf, 102.4256), Longitude.y = c("113.98648", 
"100.92610999999999", NA, NA, NA, NA)), row.names = 176:181, class = "data.frame")

我基于@Ronak Shah 的最终解决方案

library(dplyr)

values_to_combine <- c('A.', 'Ab')

df %>%
  group_by(name = replace(name, name %in% values_to_combine, 'A.')) %>%
  summarise(across(x:z, ~toString(na.omit(.)))) %>%
  mutate_all(na_if, "") # to retain NA 

标签: r

解决方案


定义要在向量中组合的值并更改name它的值。然后,您可以使用group_by和聚合它们across

library(dplyr)

values_to_combine <- c('A.', 'Ab')

df %>%
  group_by(name = replace(name, name %in% values_to_combine, 'A.')) %>%
  summarise(across(x:z, ~toString(na.omit(.))))

#   name  x     y     z    
#  <chr> <chr> <chr> <chr>
#1 A.    c     r     n    
#2 C.    m     o     w    

推荐阅读