标签: summarize

使用dplyr过滤包含列的部分字符串的行

假设我有一个像

term     cnt
apple     10
apples     5
a apple on 3
blue pears 3
pears      1
Run Code Online (Sandbox Code Playgroud)

如何过滤此列中的所有部分找到的字符串,例如得到结果

term     cnt
apple     10
pears      1
Run Code Online (Sandbox Code Playgroud)

无需指出我要过滤的字词(主语),而是通过自引用方式(即,它会针对整个列检查每个字词,并删除部分匹配的字词)。令牌的数量不受限制,字符串的一致性也不受限制(即“ apples”将与“ apple”匹配)。这将导致基于dplyr的广义反向版本

d[grep("^apple$|^pears$", d$term), ]
Run Code Online (Sandbox Code Playgroud)

另外,有趣的是,使用这种去部门化来求和,例如

term     cnt
apple     18
pears      4
Run Code Online (Sandbox Code Playgroud)

我无法使其与contains()或grep()一起使用。

谢谢

r filter dplyr summarize mutate

5
推荐指数
1
解决办法
4071
查看次数

R dplyr 将多个函数总结为选定的变量

我有一个数据集,我想对其进行平均值总结,但也计算其中 1 个变量的最大值。

\n\n

让我从一个我想要实现的目标开始:

\n\n
iris %>%\n  group_by(Species) %>%\n  filter(Sepal.Length > 5) %>%\n  summarise_at("Sepal.Length:Petal.Width",funs(mean))\n
Run Code Online (Sandbox Code Playgroud)\n\n

这给了我以下结果

\n\n
# A tibble: 3 \xc3\x97 5\n     Species Sepal.Length Sepal.Width Petal.Length Petal.Width\n      <fctr>        <dbl>       <dbl>        <dbl>       <dbl>\n1     setosa          5.8         4.4          1.9         0.5\n2 versicolor          7.0         3.4          5.1         1.8\n3  virginica          7.9         3.8          6.9         2.5\n
Run Code Online (Sandbox Code Playgroud)\n\n

有没有简单的方法来添加,例如max(Petal.Width)总结?

\n\n

到目前为止,我已经尝试过以下方法:

\n\n
iris %>%\n  group_by(Species) %>%\n  filter(Sepal.Length > 5) %>%\n  summarise_at("Sepal.Length:Petal.Width",funs(mean)) %>%\n  mutate(Max.Petal.Width = max(iris$Petal.Width))\n
Run Code Online (Sandbox Code Playgroud)\n\n

但通过这种方法,我丢失了上面代码中的group_by和,并给出了错误的结果。filter

\n\n

我能够实现的唯一解决方案如下:

\n\n
iris %>%\n  group_by(Species) …
Run Code Online (Sandbox Code Playgroud)

r dplyr summarize

4
推荐指数
1
解决办法
1万
查看次数

总结?计算基于另一列的列中的出现次数

我相信这可能有一个简单的解决方案,但是我在描述我需要做的事情(以及要搜索的内容)时遇到了麻烦。我想我需要summarize功能。我的目标输出在最底部。

我正在尝试计算另一列中每个唯一值之间的值出现次数。这是一个df希望能说明我需要做的例子。

library(dplyr)

set.seed(1)
df <- tibble("name" = c(rep("dinah",2),rep("lucy",4),rep("sora",9)),
             "meal" = c(rep(c("chicken","beef","fish"),5)),
             "date" = seq(as.Date("1999/1/1"),as.Date("2000/1/1"),25),
             "num.wins" = sample(0:30)[1:15])
Run Code Online (Sandbox Code Playgroud)

除其他事项外,我正在尝试总结(汇总)每个姓名使用此数据提供的餐食类型。

df
# A tibble: 15 x 4
   name  meal    date       num.wins
   <chr> <chr>   <date>        <int>
 1 dinah chicken 1999-01-01        8
 2 dinah beef    1999-01-26       11
 3 lucy  fish    1999-02-20       16
 4 lucy  chicken 1999-03-17       25
 5 lucy  beef    1999-04-11        5
 6 lucy  fish    1999-05-06       23
 7 sora  chicken 1999-05-31       27
 8 sora  beef    1999-06-25       15
 9 sora …
Run Code Online (Sandbox Code Playgroud)

r dplyr summarize

4
推荐指数
2
解决办法
126
查看次数

用函数替换多个`summaryize`语句

我目前正在重复很多代码,因为summarize对于不同的组,我需要始终使用相同的列。如何通过只编写一次summarize函数(始终相同)来有效地做到这一点,但是要group_by逐个定义输出名称和参数?

一个最小的例子:

col1 <- c("UK", "US", "UK", "US")
col2 <- c("Tech", "Social", "Social", "Tech")
col3 <- c("0-5years", "6-10years", "0-5years", "0-5years")
col4 <- 1:4
col5 <- 5:8

df <- data.frame(col1, col2, col3, col4, col5)

result1 <- df %>% 
  group_by(col1, col2) %>% 
  summarize(sum1 = sum(col4, col5))

result2 <- df %>% 
  group_by(col2, col3) %>% 
  summarize(sum1 = sum(col4, col5))

result3 <- df %>% 
  group_by(col1, col3) %>% 
  summarize(sum1 = sum(col4, col5))
Run Code Online (Sandbox Code Playgroud)

r function summarize tidyverse

4
推荐指数
1
解决办法
81
查看次数

group_by,获取最频繁和第二频繁的

我有以下数据集:

a   b

1   a           
1   a           
1   a           
1   none            
2   none            
2   none            
2   b           
3   a           
3   c           
3   c
3   d
4   a
Run Code Online (Sandbox Code Playgroud)

我想获取任何 a 的 b 中最频繁的值以及任何 a 的 b 的第二频繁值。如果 b 中的两个值具有相同的频率,我对这两个值中的任何一个被视为“第一”或“第二”不关心。

在这种情况下,预期输出将是:

d2:

a    first    second 
1    a        none
2    none     b
3    c        a(or d, doesn't matter)
4    a        NA
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,a=4 在 b 中只有一个值,因此我预计输出列“第二”中为 NA,因为没有第二个最常见的值。

数据:

a <- c(1,1,1,1,2,2,2,3,3,3,3,4)
b<- c("a","a", "a", "none", "none", "none", "b", "a", "c" , "c",  "d","a")  
d …
Run Code Online (Sandbox Code Playgroud)

group-by r dplyr summarize

4
推荐指数
1
解决办法
1719
查看次数

如何在单个命令中合并两个不同的dplyr摘要

我试图创建一个分组的摘要,报告每个组中的记录数,然后还显示一系列变量的含义。

我只能将如何做为两个独立的摘要,然后将它们合并在一起。这可以正常工作,但我想知道是否还有更优雅的方法可以做到这一点?

dailyn<-daily %>% # this summarises n
  group_by(type) %>%
  summarise(n=n()) %>%

dailymeans <- daily %>% # this summarises the means
  group_by(type) %>%
  summarise_at(vars(starts_with("d.")),funs(mean(., na.rm = TRUE))) %>%

dailysummary<-inner_join(dailyn,dailymeans) #this joins the two parts together
Run Code Online (Sandbox Code Playgroud)

我正在使用的数据是这样的数据框:

daily<-data.frame(type=c("A","A","B","C","C","C"),
                  d.happy=c(1,5,3,7,2,4),
                  d.sad=c(5,3,6,3,1,2))
Run Code Online (Sandbox Code Playgroud)

r dplyr summarize

3
推荐指数
1
解决办法
816
查看次数

在dplyr中找出分组值之间的差异

我想找出所观察到的案件与不属于案件类型的案件之间的区别:

set.seed(42)
df <- data.frame(type = factor(rep(c("A", "B", "C"), 2)), observed = rep(c(T,F), 3), 
                 val1 = sample(5:1, 6, replace = T), val2 = sample(1:5, 6, replace = T), 
                 val3 = sample(letters[1:5], 6, replace = T))

#      type observed val1 val2 val3
# 1    A     TRUE    1    4    e
# 2    B    FALSE    1    1    b
# 3    C     TRUE    4    4    c
# 4    A    FALSE    1    4    e
# 5    B     TRUE    2    3    e
# 6    C    FALSE …
Run Code Online (Sandbox Code Playgroud)

grouping r dplyr summarize

3
推荐指数
1
解决办法
516
查看次数

dplyr:汇总每列并返回列表列

我希望使用自定义汇总功能汇总小标题中的每一列,该汇总函数将根据数据返回不同大小的小标题。

假设我的摘要函数是这样的:

mysummary <- function(x) {quantile(x)[1:sample(1:5, 1)] %>% as_tibble}
Run Code Online (Sandbox Code Playgroud)

可以这样将其应用于一列:

cars %>% summarise(speed.summary = list(mysummary(speed)))
Run Code Online (Sandbox Code Playgroud)

但是我想不出一种使用summarise_all(或类似方法)实现此目的的方法。

使用cars数据,所需的输出将是:

tribble(
~speed.summary,        ~dist.summary, 
mysummary(cars$speed), mysummary(cars$dist)
)

# A tibble: 1 x 2
  speed.summary    dist.summary    
  <list>           <list>          
1 <tibble [5 x 1]> <tibble [2 x 1]>    
Run Code Online (Sandbox Code Playgroud)

当然,实际数据还有更多列...

有什么建议吗?

r dplyr summarize

3
推荐指数
1
解决办法
780
查看次数

使用group by计算R中列中子串的出现次数

我想计算列中每个组的字符串出现次数.在这种情况下,字符串通常是字符列中的子字符串.

我有一些数据,例如

ID   String              village
1    fd_sec, ht_rm,      A
2    NA, ht_rm           A
3    fd_sec,             B
4    san, ht_rm,         C
Run Code Online (Sandbox Code Playgroud)

我开始的代码显然是不正确的,但我没有在我的搜索中发现我可以使用列中的grep函数和按村一组

impacts <- se %>%  group_by(village) %>%
summarise(c_NA = round(sum(sub$en41_1 ==  "NA")),
          c_ht_rm = round(sum(sub$en41_1 ==  "ht_rm")),
          c_san = round(sum(sub$en41_1 ==  "san")),
          c_fd_sec = round(sum(sub$en41_1 ==  "fd_sec")))
Run Code Online (Sandbox Code Playgroud)

理想情况下,我的输出将是:

village  fd_sec  NA  ht_rm  san
A        1       1   2 
B        1
C                    1      1
Run Code Online (Sandbox Code Playgroud)

先感谢您

grep r summarize

3
推荐指数
2
解决办法
338
查看次数

根据R中另一列的值计算一列的值

我想使用数据框创建一个新数据框,其中包含邮政编码、名称和名为计数的列,该列将包括每个邮政编码的名称计数。

Zip<-c("123245","12345","123245","123456","123456","12345")
Name<-c("Bob","Bob","Bob","Jack","Jack","Mary"),
df<-data.frame(Zip,Name,Name2)

library(dplyr)
df %>%
  group_by(Zip) %>%
  mutate(Name = cumsum(Name))
Run Code Online (Sandbox Code Playgroud)

预期的

Zip Name Count
1 123245  Bob     2
2  12345  Bob     1
3  12345 Mary     1
4 123456 Jack     2
Run Code Online (Sandbox Code Playgroud)

group-by r summarize

3
推荐指数
1
解决办法
5622
查看次数

标签 统计

r ×10

summarize ×10

dplyr ×7

group-by ×2

filter ×1

function ×1

grep ×1

grouping ×1

mutate ×1

tidyverse ×1