假设我有一个像
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()一起使用。
谢谢
我有一个数据集,我想对其进行平均值总结,但也计算其中 1 个变量的最大值。
\n\n让我从一个我想要实现的目标开始:
\n\niris %>%\n group_by(Species) %>%\n filter(Sepal.Length > 5) %>%\n summarise_at("Sepal.Length:Petal.Width",funs(mean))\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n有没有简单的方法来添加,例如max(Petal.Width)总结?
到目前为止,我已经尝试过以下方法:
\n\niris %>%\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))\nRun Code Online (Sandbox Code Playgroud)\n\n但通过这种方法,我丢失了上面代码中的group_by和,并给出了错误的结果。filter
我能够实现的唯一解决方案如下:
\n\niris %>%\n group_by(Species) …Run Code Online (Sandbox Code Playgroud) 我相信这可能有一个简单的解决方案,但是我在描述我需要做的事情(以及要搜索的内容)时遇到了麻烦。我想我需要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) 我目前正在重复很多代码,因为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) 我有以下数据集:
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) 我试图创建一个分组的摘要,报告每个组中的记录数,然后还显示一系列变量的含义。
我只能将如何做为两个独立的摘要,然后将它们合并在一起。这可以正常工作,但我想知道是否还有更优雅的方法可以做到这一点?
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) 我想找出所观察到的案件与不属于案件类型的案件之间的区别:
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) 我希望使用自定义汇总功能汇总小标题中的每一列,该汇总函数将根据数据返回不同大小的小标题。
假设我的摘要函数是这样的:
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)
当然,实际数据还有更多列...
有什么建议吗?
我想计算列中每个组的字符串出现次数.在这种情况下,字符串通常是字符列中的子字符串.
我有一些数据,例如
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)
先感谢您
我想使用数据框创建一个新数据框,其中包含邮政编码、名称和名为计数的列,该列将包括每个邮政编码的名称计数。
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)