小编kev*_*kuo的帖子

如何在Spark SQL的DataFrame中更改列类型?

假设我做的事情如下:

val df = sqlContext.load("com.databricks.spark.csv", Map("path" -> "cars.csv", "header" -> "true"))
df.printSchema()

root
 |-- year: string (nullable = true)
 |-- make: string (nullable = true)
 |-- model: string (nullable = true)
 |-- comment: string (nullable = true)
 |-- blank: string (nullable = true)

df.show()
year make  model comment              blank
2012 Tesla S     No comment                
1997 Ford  E350  Go get one now th...  
Run Code Online (Sandbox Code Playgroud)

但我真的想要yearas Int(并且可能会转换其他一些列).

我能想到的最好的是

df.withColumn("year2", 'year.cast("Int")).select('year2 as 'year, 'make, 'model, 'comment, 'blank)
org.apache.spark.sql.DataFrame = [year: int, …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

143
推荐指数
12
解决办法
32万
查看次数

总结dplyr中的条件

我将以一个例子来说明我的问题.

样本数据:

 df <- data.frame(ID = c(1, 1, 2, 2, 3, 5), A = c("foo", "bar", "foo", "foo", "bar", "bar"), B =     c(1, 5, 7, 23, 54, 202))

df
  ID   A   B
1  1 foo   1
2  1 bar   5
3  2 foo   7
4  2 foo  23
5  3 bar  54
6  5 bar 202
Run Code Online (Sandbox Code Playgroud)

我想要做的是通过ID总结B的总和以及当A是"foo"时B的总和.我可以通过以下几个步骤完成此操作:

require(magrittr)
require(dplyr)

df1 <- df %>%
  group_by(ID) %>%
  summarize(sumB = sum(B))

df2 <- df %>%
  filter(A == "foo") %>%
  group_by(ID) %>%
  summarize(sumBfoo = …
Run Code Online (Sandbox Code Playgroud)

r sqldf dplyr

40
推荐指数
3
解决办法
6万
查看次数

将DataFrame与MLlib一起使用

假设我有一个DataFrame(我从HDFS上的csv读入),我想通过MLlib训练一些算法.如何将行转换为LabeledPoints或以其他方式在此数据集上使用MLlib?

apache-spark apache-spark-mllib

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

如何通过sf找到一个点属于哪个多边形

我有一个sf对象,其中包含通过.shp文件获取的都市区域的多边形信息(区域).对于给定的纬度/经度对,我想确定它属于哪个区域.我想我可以利用sf::st_contains()但是我无法以正确的格式获得lat/lon.

gis r r-sp tidyverse r-sf

10
推荐指数
2
解决办法
3395
查看次数

RMarkdown文档中的条件格式化表

例如,我可能想使用以下规则为单元格着色:

(编辑为非平凡)

  1. 蓝色if> 4
  2. 如果<= 4且> = 3.5,则无填充
  3. 如果> = 3且<3.5,则为黄色
  4. 橙色,如果<3

使用RMarkdown + knitr创建带有条件格式的表格对 我没有帮助,因为我不想只突出满足一组条件的单元格.

示例rmd:

---
title: "Untitled"
output: html_document
---

```{r, message = FALSE, results = "asis"}
library(knitr)
library(dplyr)
head(iris) %>% kable
```
Run Code Online (Sandbox Code Playgroud)

DataTables如果需要,我会采用一种解决方案

r datatables knitr r-markdown

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

将函数参数传递给dplyr select

要从数据框中选择几列,我可以做

require(dplyr)
require(magrittr)

df <- data.frame(col1=c(1, 2, 3), col2=letters[1:3], col3=LETTERS[4:6])

df %>%
  select(col1, col2)
Run Code Online (Sandbox Code Playgroud)

我想写一个类似的函数

f <- function(data, firstCol, secondCol){
   data %>%
    select(substitute(firstCol), substitute(secondCol))
}
Run Code Online (Sandbox Code Playgroud)

但是跑步f(df, col1, col2)给了我错误

Error in select_vars(names(.data), ..., env = parent.frame()) : 
  (list) object cannot be coerced to type 'double'
Called from: (function () 
{
    .rs.breakOnError(TRUE)
})()
Run Code Online (Sandbox Code Playgroud)

编辑 - 稍微简单的例子:

假设我想做

mtcars %>%
  select(cyl, hp) %>%
  unique %>%
  group_by(cyl) %>%
  summarise(avgHP = mean(hp))
Run Code Online (Sandbox Code Playgroud)

但具有不同的数据集和不同的变量名称.我可以重用的代码和替换mtcars,cylhp.但我宁愿把它全部包装在一个函数中

r dplyr magrittr

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

在RMarkdown文档中添加ggvis图使得knitr :: kable输出渲染不正确

下面的可重复示例.每当我包含一个ggvis数字时,我都会在桌面上丢失格式.

---
title: "test"
output: html_document
---

```{r setup, include=FALSE}
library(dplyr)
library(ggvis)
library(knitr)
```

The following table looks fine...

```{r echo=FALSE, results='asis'}
cars %>% kable(format = 'markdown')
```

As long as I don't include this plot below

```{r, echo=FALSE}
pressure %>%
  ggvis(x = ~temperature, y = ~pressure) %>%
  layer_bars()
```
Run Code Online (Sandbox Code Playgroud)

r rstudio knitr r-markdown ggvis

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

结合分类因素水平的惯用方法

这是我正在尝试做的一个简单的例子:

iris %>%
  mutate(Species2 = ifelse(Species %in% c("setosa", "virginica"), "other", as.character(Species)) %>% as.factor) %>%
  str
# 'data.frame': 150 obs. of  6 variables:
#   $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
# $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
# $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

如何使用tidyverse计算rowums

我做了mtcars %>% by_row(sum)但收到了消息:

by_row()已弃用; 请使用以下组合:tidyr :: nest(); dplyr ::突变(); purrr ::地图()

我天真的做法是这样的

mtcars %>% 
  group_by(id = row_number()) %>% 
  nest(-id) %>% 
  mutate(hi = map_dbl(data, sum))
Run Code Online (Sandbox Code Playgroud)

有没有办法在不创建"id"列的情况下执行此操作?

r dplyr tidyr purrr tidyverse

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

查找一个向量中小于另一个向量中的元素的元素数

假设我们有几个向量

a <- c(1, 2, 2, 4, 7)
b <- c(1, 2, 3, 5, 7)
Run Code Online (Sandbox Code Playgroud)

对于我想要的每个元素b[i],b找到的元素数量a少于b[i]或等价,我想知道b_i的等级c(b[i], a).

我可以想到几种天真的方式,例如,做以下任何一种情况length(b):

min_rank(c(b[i], a))
sum(a < b[i])
Run Code Online (Sandbox Code Playgroud)

如果length(a)= length(b)= N,其中N很大,那么最好的方法是什么?

编辑:

为了澄清,我想知道是否有一种计算效率更高的方法来做到这一点,即在这种情况下我是否能比二次时间更好.

矢量化总是很酷;),谢谢@Henrik!

运行时间

a <- rpois(100000, 20)
b <- rpois(100000, 10)

system.time(
  result1 <- sapply(b, function(x) sum(a < x))
)
# user  system elapsed 
# 71.15    0.00   71.16

sw <- proc.time()
  bu <- sort(unique(b))
  ab <- sort(c(a, bu)) …
Run Code Online (Sandbox Code Playgroud)

sorting r vector ranking time-complexity

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