假设我有这样的数据框:
Df <- data.frame(
V1 = c(1,2,3,NA,5),
V2 = c(1,2,NA,4,5),
V3 = c(NA,2,NA,4,NA)
)
Run Code Online (Sandbox Code Playgroud)
现在我想计算两个变量的每个组合的有效观察数.为此,我写了一个函数sharedcount:
sharedcount <- function(x,...){
nx <- names(x)
alln <- combn(nx,2)
out <- apply(alln,2,
function(y)sum(complete.cases(x[y]))
)
data.frame(t(alln),out)
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
> sharedcount(Df)
X1 X2 out
1 V1 V2 3
2 V1 V3 1
3 V2 V3 2
Run Code Online (Sandbox Code Playgroud)
一切都很好,但功能本身在大数据帧上需要很长时间(600个变量和大约10000个观测值).我有一种感觉,我正在监督一种更简单的方法,特别是因为cor(...,use ='pairwise')运行起来要快得多,而且必须做类似的事情:
> require(rbenchmark)
> benchmark(sharedcount(TestDf),cor(TestDf,use='pairwise'),
+ columns=c('test','elapsed','relative'),
+ replications=1
+ )
test elapsed relative
2 cor(TestDf, use = "pairwise") 0.25 1.0
1 sharedcount(TestDf) 1.90 7.6
Run Code Online (Sandbox Code Playgroud)
任何提示都表示赞赏.
注意:使用Vincent的技巧,我编写了一个返回相同数据框的函数.代码在我的答案中.
我想平滑时间序列以避免虚假的抖动/错误.换句话说,我想做一些非常局部的稳健平滑.
我在动物园包装中遇到过rollmean和rollmedian但遇到了问题,因为我的矢量中有一个NA.然后,我在那里读到那些动物园功能使用runmed,其中存在问题.
== ==例子
median(c(1,1,1,2,2,2,7,NA,1,2,3,10,10,10),na.rm = TRUE)
runmed(c(1,1,1,2,2,2,7,NA,1,2,3,10,10,10),k=3)
Run Code Online (Sandbox Code Playgroud)
第一行返回2,但如果na.rm = TRUE未包括,则返回NA .第二行返回Error in runmed(c(1, 1, 1, 2, 2, 2, 7, NA, 1, 2, 3, 10, 10, 10), k = 3) :
NA/NaN/Inf in foreign function call (arg 1).无法在该行中添加na.rm参数.
我如何处理NA以处理NA?顺便说一下,rollmean返回一个向量,该向量在NA之前是正确的,然后为每个值返回NA.
我想做以下事情:
组合成一个数据框,两个向量
数据帧应显示对齐的两个向量中的相等序列,如果向量缺少另一个向量中存在的序列,则列中的NA.
例如:
vector 1 vector 2 vector 1 vector 2
1 1 a a
2 2 g g
3 3 b b
4 1 or h a
1 2 a g
2 3 g b
5 4 c h
5 c
Run Code Online (Sandbox Code Playgroud)
应该组合成数据框架
1 1 a a
2 2 g g
3 3 b b
4 NA h NA
1 1 or a a
2 2 g g
NA 3 NA b
NA 4 …Run Code Online (Sandbox Code Playgroud) 假设SQL Server数据库中有两个表,两个表具有相同的模式.我想比较两个表上的单个列,并找到table1中缺少但在table2中的值.我在每个查询中得到一个不同的列表后,我已经在Excel中手动执行了这个操作,但如果我有一个查询,那么工作就会少一些.如何通过T-SQL找到丢失的记录?我想为以下数据类型执行此操作:datetime, nvarchar & bigint.
SELECT DISTINCT [dbo].[table1].[column1]
FROM [dbo].[table1]
ORDER BY [dbo].[table1].[column1] DESC
SELECT DISTINCT [dbo].[table2].[column1]
FROM [dbo].[table2]
ORDER BY [dbo].[table2].[column1] DESC
Run Code Online (Sandbox Code Playgroud) 所有,
我有一个问题,我担心这个问题可能太行了,但在其他地方寻找它会让我误入歧途.我可能没有使用正确的搜索字词.
我在R中有一个面板数据框(country-year),在给定变量上有一些缺失值.我试图用另一个数据框中另一个向量的值来估算它们.这是我想要做的一个例子.
假设Data是感兴趣的数据帧,其在我试图从另一个施主数据帧推断的给定矢量上具有缺失值.看起来像这样.
country year x
70 1920 9.234
70 1921 9.234
70 1922 9.234
70 1923 9.234
70 1924 9.234
80 1920 NA
80 1921 NA
80 1922 NA
80 1923 NA
80 1924 NA
90 1920 7.562
90 1921 7.562
90 1922 7.562
90 1923 7.562
90 1924 7.562
Run Code Online (Sandbox Code Playgroud)
这将是Donor框架,其值为country == 80
country x
70 9.234
80 1.523
90 7.562
Run Code Online (Sandbox Code Playgroud)
我试图找到一种无缝的方法来自动化这个,超出了命令Data$x[Data$country == 80] <- 1.523.有很多国家失踪x.
值得澄清的是,简单merge是最简单的,但不一定适合我正在尝试做的事情.一些国家将 …
我的数据集中有一个列,表示以ms为单位的日期,有时它的值是nan(实际上我的列是类型str,有时它的值是valus 'nan').我想在本专栏的几天内计算时代.问题在于,当做两个日期的差异时:
(pd.to_datetime('now') - pd.to_datetime(np.nan)).days
Run Code Online (Sandbox Code Playgroud)
如果一个被nan转换为NaT,并且差异是NaTType没有属性的类型days.
在我的情况下,我希望有nan结果.
我尝试过的其他方法:np.datetime64不能使用,因为它不能作为参数nan.我的数据无法转换为int自int没有nan.
我将pandas导入为pd并运行下面的代码并获得以下结果
码:
traindataset = pd.read_csv('/Users/train.csv')
print traindataset.dtypes
print traindataset.shape
print traindataset.iloc[25,3]
traindataset.dropna(how='any')
print traindataset.iloc[25,3]
print traindataset.shape
Run Code Online (Sandbox Code Playgroud)
产量
TripType int64
VisitNumber int64
Weekday object
Upc float64
ScanCount int64
DepartmentDescription object
FinelineNumber float64
dtype: object
(647054, 7)
nan
nan
(647054, 7)
[Finished in 2.2s]
Run Code Online (Sandbox Code Playgroud)
从结果来看,dropna行不起作用,因为行号没有改变,并且数据帧中仍然有NAN.那怎么样?我现在很疯狂.
我是R的新手,在我的数据框架中我有col1("Timestamp"),col2("Values").我必须在col2中删除超过2个连续NA的行.我的数据框看起来如下,
Timestamp | values
-----------|--------
2011-01-02 | 2
2011-01-03 | 3
2011-01-04 | NA
2011-01-05 | 1
2011-01-06 | NA
2011-01-07 | NA
2011-01-08 | 8
2011-01-09 | 6
2011-01-10 | NA
2011-01-11 | NA
2011-01-12 | NA
2011-01-13 | 2
Run Code Online (Sandbox Code Playgroud)
我想基于第二列删除超过2个重复行.预期产量 -
Timestamp | values
-----------|--------
2011-01-02 | 2
2011-01-03 | 3
2011-01-04 | NA
2011-01-05 | 1
2011-01-06 | NA
2011-01-07 | NA
2011-01-08 | 8
2011-01-09 | 6
2011-01-13 | 2
Run Code Online (Sandbox Code Playgroud)
我提前感谢您寻求解决方案.
给定一个pd.Series,我想用一个列表替换空值。也就是说,给定:
import numpy as np
import pandas as pd
ser = pd.Series([0,1,np.nan])
Run Code Online (Sandbox Code Playgroud)
我想要一个可以返回的函数
0 0
1 1
2 [nan]
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用自然函数,即fillna:
result = ser.fillna([np.nan])
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
TypeError:“值”参数必须是标量或字典,但您传递了“列表”
有什么简单的方法可以达到这个目的吗?
我有一个缺少值的字典(密钥在那里,但相关的值是空的).例如,我想要下面的字典:
dct = {'ID':'', 'gender':'male', 'age':'20', 'weight':'', 'height':'5.7'}
Run Code Online (Sandbox Code Playgroud)
要改为这种形式:
dct = {'ID':NaN, 'gender':'male', 'age':'20', 'weight':NaN, 'height':'5.7'}
Run Code Online (Sandbox Code Playgroud)
我怎样才能以最省时的方式写出来呢?
missing-data ×10
r ×5
dataframe ×3
pandas ×3
python ×2
compare ×1
datetime ×1
dictionary ×1
diff ×1
duplicates ×1
fillna ×1
python-3.x ×1
sequence ×1
series ×1
sql-server ×1
t-sql ×1