合并行将为在R中组合的每一行定义不同的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并行将为在R中组合的每一行定义不同的参数相关的知识,希望对你有一定的参考价值。

我有一个数据框,每个数据框都有不同的参数。我想为每行使用不同的参数集合并行。这是我的同一数据ZZ:

ZZ<-data.frame(Name =c("A","B","C","D","E","F"),A1=c(19,20,21,23,45,67),A2=c(1,2,3,4,5,6),A3=c(7,8,13,24,88,90),x=c(4,5,6,8,23,16),y=c(-3,-7,-6,-9,3,2))

> ZZ
  Name A1 A2 A3  x  y
1    A 19  1  7  4 -3
2    B 20  2  8  5 -7
3    C 21  3 13  6 -6
4    D 23  4 24  8 -9
5    E 45  5 88 23  3
6    F 67  6 90 16  2

我想聚合行A,B,C和D,E,F,以便为每个组定义新名称(例如:C1和C2),A1,A2和A3由sum组合而x和y使用意思。

怎么可以这样做呢?结果应该是:

> ZZ2
  Name  A1 A2  A3      x      y
1   C1  60  6  28  5.000 -5.333
2   C2 135 15 202 15.667 -1.333
答案

根据我如何解释你的问题,我相信这应该使用dplyr给你你想要的东西:

library(dplyr)

result <- ZZ %>% 
  mutate(Name = ifelse(Name %in% c("A", "B", "C"), "C1", "C2")) %>% 
  group_by(Name) %>% 
  summarise(A1 = sum(A1), A2 = sum(A2), A3 = sum(A3), x = mean(x), y = mean(y)) %>% 
  ungroup()

根据具有不同名称的行数,可能有更好的替代方法将Name变量变为2组。

编辑:如果存在4个案例

 result <- ZZ %>% 
   mutate(Name = case_when(Name %in% c("A", "B", "C") ~ "C1",
                           Name %in% c("D", "E") ~ "C2",
                           Name %in% c("F", "G") ~ "C3",
                           Name %in% c("H", "I") ~ "C4")) %>% 
   group_by(Name) %>% 
   summarise(A1 = sum(A1), A2 = sum(A2), A3 = sum(A3), x = mean(x), y = mean(y)) %>% 
   ungroup()

以上是关于合并行将为在R中组合的每一行定义不同的参数的主要内容,如果未能解决你的问题,请参考以下文章

使用不同的时间间隔合并并填充Pandas中的两个数据帧

如何从命令行将每两行合并为一行?

变量组合写入器

如何根据多个条件将 1 个 pandas 数据帧合并或组合到另一个数据帧

如何将在从控制台获取的 URL 中找到的特定字符串替换为在 Ruby 文本文件中写入的每一行中找到的文件内容?

R命令行将文件名传递给参数中的脚本(Windows)