小编sri*_*amn的帖子

readr:在write_csv中关闭科学记数法

我使用R来处理人口普查数据,该数据使用非常长的数字GEOID来识别地理位置.我面临的问题是,当使用write_csv(从readr包中)写出处理过的数据时,它正在用科学记数法编写这些GEOID.有办法解决这个问题吗?

注意:我可以通过将scipen选项设置为足够大的值来切换R控制台上的科学记数法显示.但是这个设置似乎没有扩展到readr库中.

这是一个玩具数据集:

library(dplyr)
library(readr) # which is the package with write_csv
(tbl_df(data.frame(GEOID = seq(from=60150001022000, to=60150001022005, 1))))
Source: local data frame [6 x 1]

           GEOID
1 60150001022000
2 60150001022001
3 60150001022002
4 60150001022003
5 60150001022004
6 60150001022005

write_csv((tbl_df(data.frame(GEOID = seq(from=60150001022000, to=60150001022005, 1)))), "test.csv")
Run Code Online (Sandbox Code Playgroud)

这就是我目前所获得的.我正在寻找一种方法来获得与上面相同的数字:

GEOID
6.02E+13
6.02E+13
6.02E+13
6.02E+13
6.02E+13
6.02E+13
Run Code Online (Sandbox Code Playgroud)

csv file-io r

18
推荐指数
3
解决办法
7747
查看次数

计算DataFrame每行中系列中项目的出现次数

我有一个pandas.DataFrame看起来像这样的.

COL1    COL2    COL3
C1      None    None
C1      C2      None
C1      C1      None
C1      C2      C3
Run Code Online (Sandbox Code Playgroud)

对于此数据帧中的每一行,我想计算每个C1,C2,C3的出现次数,并将此信息作为列附加到此数据帧.例如,第一行具有1个C1,0个C2和0个C3.最终的数据框应如下所示

COL1    COL2    COL3    C1  C2  C3
C1      None    None    1   0   0
C1      C2      None    1   1   0
C1      C1      None    2   0   0
C1      C2      C3      1   1   1
Run Code Online (Sandbox Code Playgroud)

因此,我创建了一个以C1,C2和C3作为值的系列 - 一种最重要的方法是循环遍历DataFrame的行和列,然后通过此系列,并在计数器匹配时递增计数器.但有没有一种apply方法能够以紧凑的方式实现这一目标?

python apply pandas

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

pandas:将DataFrames系列转换为单个DataFrame

我有一个pandas Series对象,每个值都是a DataFrame.我正在尝试将此转换为单个,DataFrame其中所有Series值(个体DataFrame)堆叠在彼此之上.如何在没有循环的情况下实现这一目标?

下面的玩具示例生成测试对象(results).

import pandas as pd
import numpy as np
numrows = 10000

def toy_function(x):
    silly_sequence = np.random.uniform(10, 100, (x+1))
    toy = pd.DataFrame({'ID':pd.Series(np.random.random_integers(1,20,3)),'VALUE':pd.Series((np.median(silly_sequence),np.mean(silly_sequence), np.max(silly_sequence)))})

    return toy

results = pd.DataFrame({'ID':range(numrows)})['ID'].apply(toy_function)
Run Code Online (Sandbox Code Playgroud)

resultsSeries类型,每个元素是DataFrame这样的:

In [1]: results[1]
Out[1]: 
   ID      VALUE
0  17  40.035398
1   8  40.035398
2  20  66.483083
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种堆叠等方式results[1],results[2]以产生这样的DataFrame:

   ID      VALUE
0  17  40.035398
1   8  40.035398
2  20  66.483083
4  12 …
Run Code Online (Sandbox Code Playgroud)

python append pandas

8
推荐指数
2
解决办法
1911
查看次数

基于存储在独立有序向量中的值对来子集数据帧

我有一个R数据帧,我需要从中分配数据.子集将基于数据帧中的两列.例如:

A <- c(1,2,3,3,5,1)
B <- c(6,7,8,9,8,8)
Value <- c(9,5,2,1,2,2)
DATA <- data.frame(A,B,Value)
Run Code Online (Sandbox Code Playgroud)

这就是DATA的样子

A B Value
1 6     9
2 7     5
3 8     2
3 9     1
5 8     2
1 8     2
Run Code Online (Sandbox Code Playgroud)

我想要那些(A,B)组合是(1,6)和(3,8)的数据行.这些对存储为A和B的单个(有序)向量:

AList <- c(1,3)
BList <- c(6,8)
Run Code Online (Sandbox Code Playgroud)

现在,我想通过比较基本子集数据如果某列存在于ALIST -B柱上在BList存在

DATA[(DATA$A %in% AList & DATA$B %in% BList),]
Run Code Online (Sandbox Code Playgroud)

子集化结果如下所示.除了价值对(1,6)和(3,8),我也得到(1,8).基本上,这个过滤器给了我AList和BList中所有组合的值对.如何将其限制为(1,6)和(3,8)?

A B Value
1 6     9
3 8     2
1 8     2
Run Code Online (Sandbox Code Playgroud)

这是我想要的结果:

A B Value
1 6     9
3 8     2
Run Code Online (Sandbox Code Playgroud)

r subset

7
推荐指数
2
解决办法
2331
查看次数

dplyr:mutate中的整数采样

我试图生成一个tbl_df0或1的随机整数列.这是我正在使用的代码:

library(dplyr)
set.seed(0)

#Dummy data.frame to test
df <- tbl_df(data.frame(x = rep(1:3, each = 4)))

#Generate the random integer column
df_test = df %>% 
  mutate(pop=sample(0:1, 1, replace=TRUE))
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有像我预期的那样发挥作用.我生成的字段似乎都是零.这是因为内部语句mutate是并行评估的,因此最终使用相同的种子进行第一次随机抽取?

df_test 
Source: local data frame [12 x 2]

   x pop
1  1   0
2  1   0
3  1   0
4  1   0
5  2   0
6  2   0
7  2   0
8  2   0
9  3   0
10 3   0
11 3   0
12 3   0
Run Code Online (Sandbox Code Playgroud)

在过去的几个小时里,我正在打破这个局面.知道我的脚本中有什么缺陷吗?

r dplyr

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

优化数据库类型以压缩数据库(SQLite)

我正在压缩数据库 ( SQLite),并且正在尝试优化在架构中分配的数据类型的大小。我拥有的数据大致可分为 3 类数字。他们是:

  1. 101010000- 9 位数字
  2. 01, - 只有 1 或 0
  3. 13.4567- 浮动类型。我只想在这里存储 13.45。

所有数字都将用于程序内的数学运算。我使用这个网站作为参考: http: //www.sqlite.org/datatype3.html

我想知道哪种数据类型亲和力将为我提供最紧凑的数据库。我目前得到的数据库大小接近 40 GB!

谢谢您的帮助。

sql database sqlite types

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

Python numpy或pandas相当于R函数sweep()

R功能是什么numpypandas相当于什么sweep()

详细说明:在R中假设我们有一个系数向量(比如beta - 数字类型)和一个数组(比如数据--20x5数字类型).我想在数组的每一行上叠加向量并乘以相应的元素.然后返回结果(20x5)数组我可以实现这个sweep().在下面找到示例R代码.

beta <-  c(10, 20, 30, 40)
data <- array(1:20,c(5,4))
sweep(data,MARGIN=2,beta,`*`)
#---------------
 > data
      [,1] [,2] [,3] [,4]
 [1,]    1    6   11   16
 [2,]    2    7   12   17
 [3,]    3    8   13   18
 [4,]    4    9   14   19
 [5,]    5   10   15   20

 > beta
 [1] 10 20 30 40

 > sweep(data,MARGIN=2,beta,`*`)
      [,1] [,2] [,3] [,4]
 [1,]   10  120  330  640
 [2,]   20  140  360  680
 [3,] …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy r pandas

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

正则表达式将原始文本转换为数据列

我有一个程序的原始文本输出,我想转换成一个DataFrame.文本文件未格式化,如下所示.

 10037    149439Special Event       11538.00       13542.59   2004.59
 10070     10071Weekday        8234.00        9244.87   1010.87
 10216     13463Weekend        145.00              0   -145.00
Run Code Online (Sandbox Code Playgroud)

我能够将数据读入R使用readLines()的基本包.如何将其转换为看起来像这样的数据(列名可以是任何东西).

 A        B         C              D              E          F
 10037    149439    Special Event  11538.00       13542.59   2004.59
 10070     10071    Weekday        8234.00         9244.87   1010.87
 10216     13463    Weekend        145.00                0   -145.00
Run Code Online (Sandbox Code Playgroud)

我应该使用什么正则表达式来实现这一目标?我知道,这是理想的应用组合regexec()regmatches().但是我无法想出一个将行分成所需组件的表达式.

regex grep r

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

data.table:使用矩阵更新data.table中的多个列

如何data.table使用矩阵中的值更新多个列.这是一个说明我面临的问题的MWE:

library(data.table)
DT = data.table(expand.grid(1:3,1:3,1:3))
DF = expand.grid(1:3,1:3,1:3)
mat = matrix(seq(0, 80), 27, 3)
Run Code Online (Sandbox Code Playgroud)

在这个data.frame世界里,我会使用这种语法:

DF[,2:ncol(DF)] = mat[,2:ncol(DF)] #Data frame approach
Run Code Online (Sandbox Code Playgroud)

类似的data.table语法产生了多个警告,输出非常奇怪.

DT[,2:ncol(DF) := mat[,2:ncol(DF)], with=FALSE] #Data table approach
Run Code Online (Sandbox Code Playgroud)

这显然是错误的 - 因为警告表明矩阵实际上是扁平的.警告信息:

1: In `[.data.table`(DT, , `:=`(2:ncol(DF), mat[, 2:ncol(DF)]), with = FALSE) :
  2 column matrix RHS of := will be treated as one vector
Run Code Online (Sandbox Code Playgroud)

r matrix data.table

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

使用ggplot2从两个不同的数据帧创建密度图

我的目标是比较各种社会经济因素(如多年收入)的分布情况,以了解人口在特定地区的演变情况,例如5年多.这方面的主要数据来自Public Use Microdata Sample.我使用R+ ggplot2作为我的首选工具.

在比较两年的数据(2005年和2010年)时,我有两个数据框hh2005和两年hh2010的家庭数据.两年的收入数据存储hincp在两个数据框的变量中.使用ggplot2我将创建个别年份的密度图如下(2010年的例子):

    p1 <- ggplot(data = hh2010, aes(x=hincp))+
      geom_density()+
      labs(title = "Distribution of income for 2010")+
      labs(y="Density")+
      labs(x="Household Income")
    p1 
Run Code Online (Sandbox Code Playgroud)

如何在此图上叠加2005年的密度?我无法弄清楚data因为hh2010我不知道如何继续阅读.我应该从一开始就以一种根本不同的方式处理数据吗?

plot r ggplot2 density-plot

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

标签 统计

r ×7

pandas ×3

python ×3

append ×1

apply ×1

arrays ×1

csv ×1

data.table ×1

database ×1

density-plot ×1

dplyr ×1

file-io ×1

ggplot2 ×1

grep ×1

matrix ×1

numpy ×1

plot ×1

regex ×1

sql ×1

sqlite ×1

subset ×1

types ×1