我有两个相同长度的列表
a = [[1,2], [2,3], [3,4]]
b = [[9], [10,11], [12,13,19,20]]
Run Code Online (Sandbox Code Playgroud)
并希望将它们结合起来
c = [[1, 2, 9], [2, 3, 10, 11], [3, 4, 12, 13, 19, 20]]
Run Code Online (Sandbox Code Playgroud)
我是这样做的
c= []
for i in range(0,len(a)):
c.append(a[i]+ b[i])
Run Code Online (Sandbox Code Playgroud)
但是,我从R使用以避免for循环,而zip和itertools之类的替代品不会生成我想要的输出.有没有办法做得更好?
编辑: 谢谢你的帮助!我的清单有300,000个组件.解决方案的执行时间是
[a_ + b_ for a_, b_ in zip(a, b)]
1.59425 seconds
list(map(operator.add, a, b))
2.11901 seconds
Run Code Online (Sandbox Code Playgroud) 我有一个大型数据表,其中包含每个 ID 事件的开始日期和结束日期:
library(data.table)
dt = data.table(
ID = c(1,1,2,2),
STARTDATE = as.Date(c("2011-10-10","2011-10-13","2011-10-10","2011-10-13"),format = "%Y-%m-%d"),
ENDDATE = as.Date(c("2011-10-12","2011-10-15","2011-10-12","2011-10-15"),format = "%Y-%m-%d")
)
dt
> ID STARTDATE ENDDATE
>1: 1 2011-10-10 2011-10-12
>2: 1 2011-10-13 2011-10-15
>3: 2 2011-10-10 2011-10-12
>4: 2 2011-10-13 2011-10-15
Run Code Online (Sandbox Code Playgroud)
我想将时间窗口中每个 ID 和日期的行添加到此数据表中,预期结果如下:
STARTDATE ENDDATE ID DAILY
1: 2011-10-10 2011-10-12 1 2011-10-10
2: 2011-10-10 2011-10-12 1 2011-10-11
3: 2011-10-10 2011-10-12 1 2011-10-12
4: 2011-10-13 2011-10-15 1 2011-10-13
5: 2011-10-13 2011-10-15 1 2011-10-14
6: 2011-10-13 2011-10-15 1 2011-10-15
7: …
Run Code Online (Sandbox Code Playgroud) 我的 R 中的 RAM 用完了,data.table 包含 ~100M 行和 40 列全双打。我天真的想法是我可以通过降低精度来减少数据表的对象大小。逗号后不需要 15 位数字。我通过四舍五入来玩,但正如我们所知
round(1.68789451154844878,3)
Run Code Online (Sandbox Code Playgroud)
给
1.6879999999999999
Run Code Online (Sandbox Code Playgroud)
并没有帮助。因此,我将值转换为整数。但是,如下面的小示例所示,对于数值向量,从 8000040 字节到 4000040 字节仅减少了 50%,并且在进一步降低精度时,这种减少不会再增加。
有没有更好的方法来做到这一点?
set.seed(1)
options(digits=22)
a1 = rnorm(10^6)
a2 = as.integer(1000000*(a1))
a3 = as.integer(100000*(a1))
a4 = as.integer(10000*(a1))
a5 = as.integer(1000*(a1))
head(a1)
head(a2)
head(a3)
head(a4)
head(a5)
Run Code Online (Sandbox Code Playgroud)
给
[1] -0.62645381074233242 0.18364332422208224 -0.83562861241004716 1.59528080213779155 0.32950777181536051 -0.82046838411801526
[1] -626453 183643 -835628 1595280 329507 -820468
[1] -62645 18364 -83562 159528 32950 -82046
[1] -6264 1836 -8356 15952 3295 -8204
[1] -626 183 -835 1595 329 -820 …
Run Code Online (Sandbox Code Playgroud) 我希望分位数回归可以预测单调的分位数,即
但是,R中的quantreg包会生成完全没有意义的预测,请参见图:
这有什么理由吗?
以下示例.
library(quantreg)
library(ggplot2)
data(engel)
taus <- seq(0.01,0.99,0.01)
model_qr <- quantreg::rq(foodexp~income,tau=taus,data = engel)
test <- data.frame(income = 200, foodexp= 300)
result <- data.frame(
Forecast = as.numeric(predict(model_qr, test)),
Quantile = taus *100
)
ggplot(result, aes(x = Quantile, y = Forecast)) +
geom_point()
Run Code Online (Sandbox Code Playgroud) 我想像这样改造一个物体
df <- data.frame(ROW = c(1,3),COLUMN =c(2,3),VALUE = c(10,20))
df
ROW COLUMN VALUE
1 2 10
3 3 20
Run Code Online (Sandbox Code Playgroud)
到这样的矩阵
m <-matrix(c(0,10,0,0,0,0,0,0,20),ncol = 3,nrow = 3)
m
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 10 0 0
[3,] 0 0 20
Run Code Online (Sandbox Code Playgroud)
我知道数据框代表一个稀疏矩阵,但我没有找到与我正在寻找的内容完全相关的任何其他问题。
导入后我的数据如下所示
A = data.frame( ID= c(1,2,3,4,5,6), Name = c(NA,"A",NA,NA,NA,"B"))
>A
ID Name
1 <NA>
2 A
3 <NA>
4 <NA>
5 <NA>
6 B
Run Code Online (Sandbox Code Playgroud)
当我选择Name =="A"的所有行时,我期待这个结果:
ID Name
2 2 A
Run Code Online (Sandbox Code Playgroud)
但是,我得到5行:
> A[A$Name=="A",]
ID Name
NA NA <NA>
2 2 A
NA.1 NA <NA>
NA.2 NA <NA>
NA.3 NA <NA>
Run Code Online (Sandbox Code Playgroud)
请注意,我不寻找,complete.cases()
因为数据框中有更多列.我也确实指定了na.strings
参数read.csv(...,na.strings = NA)
.缺少的值不是"NA",而是csv文件中的NA,并且在导入过程中使用它并没有改变任何东西.