我有一个数据框,每行代表一系列学校
edu <- read.table(header=TRUE, text="Elem Mid High
e1 m1 h1
e2 m2 h2
e1 m2 h2
e3 m1 h1")
Run Code Online (Sandbox Code Playgroud)
我想将其转换为边缘列表
s1 s2
1 e1 m1
2 e2 m2
3 e1 m2
4 e3 m1
5 m1 h1
6 m2 h2
7 m2 h2
8 m1 h1
Run Code Online (Sandbox Code Playgroud)
对于有向图(通过igraph包).
我是这样做的:
e2m <- edu[,1:2]
m2h <- edu[,2:3]
colnames(e2m) <- c("s1", "s2")
colnames(m2h) <- c("s1", "s2")
schools <- rbind(e2m,m2e)
Run Code Online (Sandbox Code Playgroud)
"学校"包含我想要的东西,但如果我想添加第四列(例如"Uni"),它就是迭代的并且变得很麻烦.这样做的矢量化方法是什么?
我有多个具有多个段的路径.如何用相同的颜色为每条路径的第N段着色?
例如:
require(dplyr)
require(ggvis)
df <- data.frame(x = runif(10,0,10), y = runif(10,0,10),
group=c(rep(5,5),rep(10,5)), colorIdx=rep(c(1:5), 2))
df$group = factor(df$group)
color_fun = colorRampPalette(c("yellow","blue"),5)
myColors = color_fun(5)
df$color = myColors[df$colorIdx]
df %>% group_by(group) %>%
ggvis(~x, ~y, strokeWidth:=~group) %>% layer_paths(stroke :=~color)
Run Code Online (Sandbox Code Playgroud)
产生的路径是单色的 - 我希望它们从黄色到蓝色.
使用ggplot2,可以通过以下方式完成:
require(ggplot2)
ggplot(df, aes(x=x, y=y, group=group, colour=colorIdx, size=group)) + geom_path() +
scale_colour_gradient("", low="#FED863", high="#2A6EBB", limits=c(1,4))
Run Code Online (Sandbox Code Playgroud)
我想创建一个应用于数据帧的过滤器列表.就像是:
filters = list(cyl=4, am=1)
Run Code Online (Sandbox Code Playgroud)
然后将其应用于'mtcars'数据框,以获得cyl = 4和am = 1的记录.我可以做这个:
filter_(mtcars,
lazyeval::interp(~ val == var, val = as.name(names(filters[1])),
var = filters[[1]]))
Run Code Online (Sandbox Code Playgroud)
但这只会在过滤器列表中选择第一个条目.
应用所有过滤器的惯用方法是什么?
(我正在尝试创建一个有点通用的函数,它可以接受一个数据框和一个标准集,并将输出转换.现在,相等对于标准是好的,但更通用的习语会很好)
(编辑试图制作可重复的例子)
我试图通过dplyr(和依赖项)连接到BigQuery,我收到一个错误.我究竟做错了什么?
require(dplyr) #installed from cran
devtools::install_github("assertthat")
devtools::install_github("bigrquery")
require(bigrquery)
billing_project = "omitted"
sql <- "SELECT year, month, day, weight_pounds FROM natality LIMIT 5"
query_exec("publicdata", "samples", sql, billing = billing_project)
# returns
# Auto-refreshing stale OAuth token.
# year month day weight_pounds
# 1 1969 1 2 8.999270
# 2 1969 1 15 8.375361
# 3 1969 1 27 9.124933
# 4 1969 1 9 6.000983
# 5 1969 1 25 7.561856
bq_db = src_bigquery("publicdata","samples", billing=billing_project)
bq_db
# returns
# src: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的DataFrame
如下:
import sqlContext.implicits._
val lookup = Array("one", "two", "three", "four", "five")
val theRow = Array("1",Array(1,2,3), Array(0.1,0.4,0.5))
val theRdd = sc.makeRDD(theRow)
case class X(id: String, indices: Array[Integer], weights: Array[Float] )
val df = theRdd.map{
case Array(s0,s1,s2) => X(s0.asInstanceOf[String],s1.asInstanceOf[Array[Integer]],s2.asInstanceOf[Array[Float]])
}.toDF()
df.show()
Run Code Online (Sandbox Code Playgroud)
df 定义为
df: org.apache.spark.sql.DataFrame = [id: string, indices: array<int>, weights: array<float>]
Run Code Online (Sandbox Code Playgroud)
这就是我想要的。
执行后,我得到
org.apache.spark.SparkException:作业因阶段失败而中止:阶段 13.0 中的任务 1 失败 1 次,最近一次失败:阶段 13.0 中丢失任务 1.0(TID 50,本地主机):scala.MatchError:1(属于 java 类) .lang.String)
这个 MatchError 是从哪里来的?并且,是否有更简单的方法来以DataFrames
编程方式创建示例?
如果“当前”总和超过某个阈值,我想使用 dplyr 生成带有重置的累积总和。在下面,我想对 'a' 进行 cumsum。
library(dplyr)
library(tibble)
tib <- tibble(
t = c(1,2,3,4,5,6),
a = c(2,3,1,2,2,3)
)
# what I want
## thresh = 5
# A tibble: 6 x 4
# t a g c
# <dbl> <dbl> <int> <dbl>
# 1 1.00 2.00 0 2.00
# 2 2.00 3.00 0 5.00
# 3 3.00 1.00 1 1.00
# 4 4.00 2.00 1 3.00
# 5 5.00 2.00 1 5.00
# 6 6.00 3.00 2 3.00
# what …
Run Code Online (Sandbox Code Playgroud) 特定
qz <- quantile(c(1,2,3,4,5,6,7,8,9,10), c(0.0, 0.2, 0.4, 0.6, 0.8, 1.0))
Run Code Online (Sandbox Code Playgroud)
我想从分位数创建一个标签矢量.目前,我这样做
zlab <- c(paste(paste(sprintf(qz[[1]], fmt='$%.2f'), "-"), sprintf(qz[2],
fmt='$%.2f')), paste(paste(sprintf(qz[[2]], fmt='$%.2f'), "-"), sprintf(qz[3],
fmt='$%.2f')),paste(paste(sprintf(qz[[3]], fmt='$%.2f'), "-"), sprintf(qz[4],
fmt='$%.2f')), paste(paste(sprintf(qz[[4]], fmt='$%.2f'), "-"), sprintf(qz[5],
fmt='$%.2f')), paste(paste(sprintf(qz[[5]], fmt='$%.2f'), "-"), sprintf(qz[6],
fmt='$%.2f')))
Run Code Online (Sandbox Code Playgroud)
得到
zlab
[1] "$1.00 - $2.80" "$2.80 - $4.60" "$4.60 - $6.40" "$6.40 - $8.20" "$8.20 - $10.00"
Run Code Online (Sandbox Code Playgroud)
zlab的格式正确,并最终作为标签在图上结束.但是生成zlab真的很难看.我能以更优雅的方式做到这一点吗?