小编Art*_*Yip的帖子

在 R 中使用 stringdist_join() 进行模糊连接,错误:下标赋值中不允许使用 NA

首先,如果我的格式不好,我很抱歉,这是我第一次发帖,(也是编程和 R 的新手)

我试图在字符串变量上将两个数据框合并在一起。我正在合并大学名称,这可能不完全匹配,所以我希望使用模糊或近似字符串匹配函数进行合并。当我找到 'fuzzyjoin' 包时,我很高兴。

from cranR: stringdist_join: 根据列的模糊字符串匹配连接两个表

stringdist_join(x, y, by = NULL, max_dist = 2, method = c("osa", "lv",
  "dl", "hamming", "lcs", "qgram", "cosine", "jaccard", "jw","soundex"), mode = "inner", ignore_case = FALSE, distance_col = NULL, ...)
Run Code Online (Sandbox Code Playgroud)

我的代码:

stringdist_left_join(new, institutions, by = c("tm_9_undergradu" = "Institution.Name"))
Run Code Online (Sandbox Code Playgroud)

错误:

Error in dists[include] <- stringdist::stringdist(v1[include], v2[include],  : 
NAs are not allowed in subscripted assignments
Run Code Online (Sandbox Code Playgroud)

我知道这些列中有一些 NA,但我不确定如何删除它们,因为我也需要它们。我知道其他连接和合并功能 NA 将被忽略。有没有人知道如何解决此包的此错误或以另一种方式对字符串进行近似连接。感谢您的帮助。

merge r fuzzy-comparison dplyr fuzzyjoin

8
推荐指数
1
解决办法
1715
查看次数

如何在ggplot中的标签内对主Y轴进行排序

我是ggplot图书馆的新手。并尝试使用以下内容绘制绘图data.frame

library(tidyverse)

df <-
  tribble(~event, ~startdate,~enddate,~loc,
      "A",as.POSIXct("1984/02/10"),as.POSIXct("1987/06/10"),"1",
      "B",as.POSIXct("1984/02/11"),as.POSIXct("1990/02/12"),"2",
      "A",as.POSIXct("1992/05/15"),as.POSIXct("1999/06/15"),"3",
      "C",as.POSIXct("2003/08/29"),as.POSIXct("2015/08/29"),"4",
      "B",as.POSIXct("2002/04/11"),as.POSIXct("2012/04/12"),"5",
      "E",as.POSIXct("2000/02/10"),as.POSIXct("2005/02/15"),"6",
      "A",as.POSIXct("1985/02/10"),as.POSIXct("1987/06/10"),"7",
      "B",as.POSIXct("1989/02/11"),as.POSIXct("1990/02/12"),"8",
      "A",as.POSIXct("1997/05/15"),as.POSIXct("1999/06/15"),"9",
      "C",as.POSIXct("2010/08/29"),as.POSIXct("2015/08/29"),"10",
      "B",as.POSIXct("2010/04/11"),as.POSIXct("2012/04/12"),"11",
      "E",as.POSIXct("2004/02/10"),as.POSIXct("2005/02/15"),"12")
max_date = max(df$startdate,df$enddate)
Run Code Online (Sandbox Code Playgroud)

使用以下代码片段:

ggplot(df)+
  geom_segment(aes(y=loc, yend = loc, x = startdate, xend = enddate, colour=event),size = 5,alpha=0.6) +
  geom_label(aes(label=event, y = loc, x=max_date), size=2) +
  xlab("Year") + ylab("LoC") +
  scale_x_datetime(date_breaks = "year", date_labels = "%Y") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  facet_grid(rows = vars(event), scales = "free")
Run Code Online (Sandbox Code Playgroud)

它生成以下图: 在此处输入图片说明

我想订购 LoC 轴,即标签中的主要 Y 轴,即事件(次要 …

r ggplot2 forcats

6
推荐指数
1
解决办法
65
查看次数

使用 dplyr 和 tidyr 计算小计

expand.grid(country = c('Sweden','Norway', 'Denmark','Finland'),
            sport = c('curling','crosscountry','downhill')) %>% 
    mutate(medals = sample(0:3, 12, TRUE)) -> 
 data
Run Code Online (Sandbox Code Playgroud)

使用 reshape2 的 dcast 只需一行即可实现此目的。使用自定义名称作为边距需要额外的步骤。

library(reshape2)

data %>% 
  dcast(country ~  sport, margins = TRUE, sum) %>% 

 # optional renaming of the margins `(all)`
  rename(Total = `(all)`) %>% 
  mutate(country = ifelse(country == "(all)", "Total", country))
Run Code Online (Sandbox Code Playgroud)

我的 dplyr + tidyr 方法很冗长。使用 tidyr 和 dplyr 编写此内容的最佳(紧凑且可读)方式是什么。

library(dplyr)
library(tidyr)

data %>% 
  group_by(sport) %>% 
  summarise(medals = sum(medals)) %>% 
  mutate(country = 'Total') ->
  sport_totals

data %>% 
  group_by(country) %>% 
  summarise(medals = sum(medals)) …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyr

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

R如何使用带有filter或filter_的curl curl?

我在评论者建议!! ensym的地方回答这个问题,我认为这可能是使用卷曲{{的好地方,但我无法使其正常工作(也许不适用?)。

在不使用filter_,eval / parse或quote-unquote的情况下,如何执行此过滤器操作?会帮助吗?

我的解决方案(1g)使用filter_和使用粘贴建立的条件。1a有效(但是可以使用{{}}吗?)

如果我们想按多个变量过滤该怎么办?这是您看到2g在下面工作的地方(而2a不再工作了)。

library(tidyverse)
set.seed(1234)
A <- matrix(rnorm(30),nrow = 10, ncol = 3) %>% as_tibble() %>% set_names(paste("var", seq(1:3), sep = ""))
varnames_1 <- c("var2")

(expected_result_1 <- filter(A, var2 > 0))
#> # A tibble: 3 x 3
#>     var1   var2   var3
#>    <dbl>  <dbl>  <dbl>
#> 1 -2.35  0.0645  0.460
#> 2  0.429 0.959  -0.694
#> 3 -0.890 2.42   -0.936

(answer_1a <- filter(A,!!ensym(varnames_1) > 0)) # works (thanks joran and aosmith)
#> # A …
Run Code Online (Sandbox Code Playgroud)

r filter dplyr tidyeval rlang

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

magrittr 三通管 %T&gt;% 等效

我正在查看文档中 magrittr 三通管 %T>% 的示例,但我并没有立即掌握它在做什么。有人可以展示没有三通管的等效代码是什么吗?

rnorm(200) %>%
matrix(ncol = 2) %T>%
plot %>% # plot usually does not return anything. 
colSums
Run Code Online (Sandbox Code Playgroud)

r magrittr tidyverse

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