根据列A组合R中的多行

  • 本文关键字:组合 r csv text dplyr
  • 更新时间 :
  • 英文 :


我正在总结一个巨大的数据帧,其中包含7000多个非数字值。

下面是一个我试图用这些数据做什么的例子。

tbody>upiter//tr>>SaturnP>Mars
人员 描述 首字母
Jake Info1 JK
Jake Info2 JK
Sam Info1 SP
Sam Info2
Sam Info3 SP

您可以使用summary、粘贴和折叠:

test <- read.table(
text = "Person  Description Initials    Locations
Jake    Info1   JK  Mars
Jake    Info2   JK  Jupiter
Sam Info1   SP  Saturn
Sam Info2   SP  Earth
Sam Info3   SP  Mars", sep = 't', header = TRUE, fill = TRUE)
library(tidyverse)
test %>%
group_by(Person, Initials) %>%
summarise(Description = paste(Description, collapse = ","),
Locations = paste(Locations, collapse = ","))
#> `summarise()` regrouping output by 'Person' (override with `.groups` argument)
#> # A tibble: 2 x 4
#> # Groups:   Person [2]
#>   Person Initials Description       Locations        
#>   <chr>  <chr>    <chr>             <chr>            
#> 1 Jake   JK       Info1,Info2       Mars,Jupiter     
#> 2 Sam    SP       Info1,Info2,Info3 Saturn,Earth,Mars

但要注意,你基本上是在制造你的数据;"不整洁"。。。

您可以使用aggregate():

~的rhs上的变量是分组变量,而.表示"测试"数据帧中的所有其他变量。其他传递的参数CCD_ 4和CCD_。

aggregate(.~Person+Initials, test, paste, collapse=" ; ")
##   Person Initials           Description             Locations
## 1   Jake       JK         Info1 ; Info2        Mars ; Jupiter
## 2    Sam       SP Info1 ; Info2 ; Info3 Saturn ; Earth ; Mars

它产生了与其他提出的解决方案相同的结果:

res_Tjebo <- test %>%
group_by(Person, Initials) %>%
summarise(Description = paste(Description, collapse = ","),
Locations   = paste(Locations,   collapse = ",")) %>% 
ungroup()
res_jwarz <- test %>% 
aggregate(
.~Person+Initials, 
., 
paste, collapse=",") %>%
as_tibble()
identical(res_Tjebo, res_jwarz)
## [1] TRUE

相关内容

  • 没有找到相关文章

最新更新