相关疑难解决方法(0)

如何加入(合并)数据框(内部,外部,左侧,右侧)?

给出两个数据框:

df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)))
df2 = data.frame(CustomerId = c(2, 4, 6), State = c(rep("Alabama", 2), rep("Ohio", 1)))

df1
#  CustomerId Product
#           1 Toaster
#           2 Toaster
#           3 Toaster
#           4   Radio
#           5   Radio
#           6   Radio

df2
#  CustomerId   State
#           2 Alabama
#           4 Alabama
#           6    Ohio
Run Code Online (Sandbox Code Playgroud)

我怎样才能做数据库风格,即sql风格,加入?也就是说,我该怎么做:

  • 一个内连接df1df2:
    只返回行中左表在右表匹配的密钥.
  • 一个外连接df1df2:
    返回两个表中的所有行,从有右表中的匹配键左连接记录.
  • 甲 …

merge join r dataframe r-faq

1155
推荐指数
13
解决办法
108万
查看次数

使用sparklyr对大数据进行rollapply

我想估计大约2250万个观测数据集的滚动风险值,因此我想使用sparklyr进行快速计算.这是我做的(使用示例数据库):

library(PerformanceAnalytics)
library(reshape2)
library(dplyr)

data(managers)
data <- zerofill(managers)
data<-as.data.frame(data)
class(data)
data$date=row.names(data)
lmanagers<-melt(data, id.vars=c('date'))
Run Code Online (Sandbox Code Playgroud)

现在我估计使用dplyr和PerformanceAnalytics包的VaR:

library(zoo) # for rollapply()
var <- lmanagers %>% group_by(variable) %>% arrange(variable,date) %>% 
  mutate(var=rollapply(value, 10,FUN=function(x) VaR(x, p=.95, method="modified",align = "right"), partial=T))
Run Code Online (Sandbox Code Playgroud)

这很好用.现在我这样做是为了使用sparklyr:

library(sparklyr)
sc <- spark_connect(master = "local")
lmanagers_sp <- copy_to(sc,lmanagers)
src_tbls(sc)

var_sp <- lmanagers_sp %>% group_by(variable) %>% arrange(variable,date) %>% 
  mutate(var=rollapply(value, 10,FUN=function(x) VaR(x, p=.95, method="modified",align = "right"), partial=T)) %>% 
  collect
Run Code Online (Sandbox Code Playgroud)

但是这会产生以下错误:

Error: Unknown input type: pairlist
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我哪里出错,什么是正确的代码?或者任何其他更快地估算滚动VaR的解决方案也是值得赞赏的.

r performanceanalytics dplyr rollapply sparklyr

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

r相当于sql更新?

我环顾四周,找不到一个简单的答案。我该如何做 SQL 中的更新表?例如:

> df1 = data.frame(id=seq(1:3), v1=c("a", "b", NA))
> df1
  id   v1
1  1    a
2  2    b
3  3 <NA>
> df2 = data.frame(id=seq(1:3), v2=c("z", "y", "c"))
> df2
  id v2
1  1  z
2  2  y
3  3  c
Run Code Online (Sandbox Code Playgroud)

如何使用 v1 中 v2 的值更新 df1,但仅当 id 匹配且 id > 2 时?我查看了 data.table,但无法弄清楚 := 语法,并希望基本 R 中有一些简单的东西?期望的输出是:

> df1
  id   v1
1  1    a
2  2    b
3  3    c
Run Code Online (Sandbox Code Playgroud)

sql r

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

使用Tidyverse Join更新/替换Dataframe中的值

使用查找表中的(正确)值更新/替换主数据集中的NA的最有效方法是什么?这是一个如此常见的操作!类似的问题似乎没有整洁的解决方案.

约束:1)请假设大量缺失值和更大的查找表比给出的示例.所以情况下明智的替换操作将是不切实际的(不case_when,if_else等等)

2)查找表没有主数据帧的所有值,只有替换的值.

Tidyverse解决方案的答案更受欢迎.类似的问题似乎没有整洁的解决方案.

library(tidyverse)

### Main Dataframe ###
df1 <- tibble(
  state_abbrev = state.abb[1:10],
  state_name = c(state.name[1:5], rep(NA, 3), state.name[9:10]),
  value = sample(500:1200, 10, replace=TRUE)
)


#> # A tibble: 10 x 3
#>    state_abbrev state_name value
#>    <chr>        <chr>      <int>
#>  1 AL           Alabama      551
#>  2 AK           Alaska       765
#>  3 AZ           Arizona      508
#>  4 AR           Arkansas     756
#>  5 CA           California   741
#>  6 CO           <NA>        1100
#>  7 CT           <NA> …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

标签 统计

r ×4

dplyr ×2

dataframe ×1

join ×1

merge ×1

performanceanalytics ×1

r-faq ×1

rollapply ×1

sparklyr ×1

sql ×1