小编sch*_*nee的帖子

如何在前几列之后将数据框的列移动到行中?

我有一个数据框,每行代表一系列学校

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"),它就是迭代的并且变得很麻烦.这样做的矢量化方法是什么?

r dataframe

14
推荐指数
2
解决办法
1720
查看次数

ggvis/layer_paths中的颜色路径段

我有多个具有多个段的路径.如何用相同的颜色为每条路径的第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)

在此输入图像描述

r ggvis

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

如何通过dplyr和filter_以编程方式提供要应用的过滤器列表

我想创建一个应用于数据帧的过滤器列表.就像是:

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)

但这只会在过滤器列表中选择第一个条目.

应用所有过滤器的惯用方法是什么?

(我正在尝试创建一个有点通用的函数,它可以接受一个数据框和一个标准集,并将输出转换.现在,相等对于标准是好的,但更通用的习语会很好)

r dplyr

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

如何使用dplyr创建BigQuery tbl

(编辑试图制作可重复的例子)

我试图通过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)

r google-bigquery dplyr

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

如何在 Scala / Spark 中创建示例数据帧

我正在尝试创建一个简单的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编程方式创建示例?

scala apache-spark-sql

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

dplyr / R 带复位的累积总和

如果“当前”总和超过某个阈值,我想使用 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)

r dplyr

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

从向量连接相邻的字符串

特定

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真的很难看.我能以更优雅的方式做到这一点吗?

r vector

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

标签 统计

r ×6

dplyr ×3

apache-spark-sql ×1

dataframe ×1

ggvis ×1

google-bigquery ×1

scala ×1

vector ×1