Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用动态列总结dplyr?_R_Dplyr_Summarize - Fatal编程技术网

用动态列总结dplyr?

用动态列总结dplyr?,r,dplyr,summarize,R,Dplyr,Summarize,我有一些R代码,我想让它做什么。但现在的问题是: 是否有任何机制可以避免编码A1 A2 A3等?我想为以A开头的所有列编写一个*代码。可以有任意数量的“A”列依赖于代码中定义的列表长度。代码的其余部分是动态的,但这里我有一个手动干预(在summerise语句中添加一些a列或删除一些a列) 我在中找到了summary_,但我不知道如何在其他列中同时执行last()和sum()等其他操作 l_af <- l_cf %>% group_by(PID, Server) %>

我有一些R代码,我想让它做什么。但现在的问题是: 是否有任何机制可以避免编码A1 A2 A3等?我想为以A开头的所有列编写一个*代码。可以有任意数量的“A”列依赖于代码中定义的列表长度。代码的其余部分是动态的,但这里我有一个手动干预(在summerise语句中添加一些a列或删除一些a列)

我在中找到了summary_,但我不知道如何在其他列中同时执行last()和sum()等其他操作

  l_af <- l_cf %>%
    group_by(PID, Server) %>%
    summarise(Player=last(Player),
              Guild=last(Guild),
              Points=last(Points),
              Battles=last(Battles),
              A1=max(A1),
              A2=max(A2),
              A3=max(A3),
              A4=max(A4),
              A5=max(A5),
              A6=max(A6),
              RecCount=sum(RecCount))
l_af%
分组依据(PID,服务器)%>%
总结(玩家=最后一名玩家),
帮会=最后一个(帮会),
点数=最后一个(点数),
战斗=最后一次(战斗),
A1=最大值(A1),
A2=最大值(A2),
A3=最大值(A3),
A4=最大值(A4),
A5=最大值(A5),
A6=最大值(A6),
RecCount=总和(RecCount))

感谢您的帮助。

使用
摘要的问题在于,如果未使用其他列,则会删除所有列。您可以考虑使用<代码>突变代码 >首先执行所有操作,然后使用<代码>汇总。p>
library(dplyr)

l_cf %>%
  group_by(PID, Server) %>%
  mutate_at(vars(Player,Guild,Points,Battles), last) %>%
  mutate_at(vars(starts_with("A")), max) %>%
  mutate(RecCount  = sum(RecCount)) %>%
  summarise_all(max)
可复制的例子

set.seed(123)
df <- data.frame(group = rep(1:5, 2), x = runif(10), y = runif(10), 
                 a1 = runif(10), a2 = runif(10), z = runif(10))
set.seed(123)
df%
分组依据(分组)%>%
总结(x=最后一(x),
y=最后一个(y),
a1=最大值(a1),
a2=最大值(a2),
z=总和(z))
#一个tibble:5x6
#x组y a1 a2 z
#         
#1     1 0.0456 0.900  0.890 0.963 0.282
#2     2 0.528  0.246  0.693 0.902 0.648
#3     3 0.892  0.0421 0.641 0.691 0.880
#4     4 0.551  0.328  0.994 0.795 0.635
#5     5 0.457  0.955  0.656 0.232 1.01 
现在将这些函数应用于多个列

df %>%
  group_by(group) %>%
  mutate_at(vars(x, y), last) %>%
  mutate_at(vars(starts_with("a")), max) %>%
  mutate(z = sum(z)) %>%
  summarise_all(max)


#  group      x      y    a1    a2     z
#  <int>  <dbl>  <dbl> <dbl> <dbl> <dbl>
#1     1 0.0456 0.900  0.890 0.963 0.282
#2     2 0.528  0.246  0.693 0.902 0.648
#3     3 0.892  0.0421 0.641 0.691 0.880
#4     4 0.551  0.328  0.994 0.795 0.635
#5     5 0.457  0.955  0.656 0.232 1.01 
df%>%
分组依据(分组)%>%
在(变量(x,y),最后一次)%>%
在(变量(以“a”开头),最大值)%>%
突变(z=总和(z))%>%
总结所有(最大值)
#x组y a1 a2 z
#         
#1     1 0.0456 0.900  0.890 0.963 0.282
#2     2 0.528  0.246  0.693 0.902 0.648
#3     3 0.892  0.0421 0.641 0.691 0.880
#4     4 0.551  0.328  0.994 0.795 0.635
#5     5 0.457  0.955  0.656 0.232 1.01 

我们可以看到,这两种方法都给出了相同的输出

欢迎来到StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助你。非常感谢!这就解决了我的问题。顺便说一句,在我的例子中,“公会”在我得到1或0后包含真值或假值。我不得不对它们重新编码,但它起作用了。
df %>%
  group_by(group) %>%
  mutate_at(vars(x, y), last) %>%
  mutate_at(vars(starts_with("a")), max) %>%
  mutate(z = sum(z)) %>%
  summarise_all(max)


#  group      x      y    a1    a2     z
#  <int>  <dbl>  <dbl> <dbl> <dbl> <dbl>
#1     1 0.0456 0.900  0.890 0.963 0.282
#2     2 0.528  0.246  0.693 0.902 0.648
#3     3 0.892  0.0421 0.641 0.691 0.880
#4     4 0.551  0.328  0.994 0.795 0.635
#5     5 0.457  0.955  0.656 0.232 1.01