小编Pie*_*nte的帖子

识别二进制列

我想在data.frame中识别二进制列.

例如,这个表

my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")
Run Code Online (Sandbox Code Playgroud)

会给 FALSE, FALSE, TRUE

r

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

修改函数内的点(...)

我正在尝试修改自定义函数中的点(...).这是我的plot2函数的简化示例,它在屏幕上显示一个图type="p"(默认值)并保存一个svg type="l".当其中一个...绘图选项已在函数中时,问题就会浮现.在此示例中,"type"由多个实际参数匹配.

plot2 <-function(...){
plot(...) #visible on screen

svg("c:/temp/out.svg") #saved to file
plot(...,type="l")
dev.off()
}

#This works
plot2(1:10)
#This does not work because type is redefined
plot2(1:10, type="o")
Run Code Online (Sandbox Code Playgroud)

我试图将点list放在函数内部并修改它,但plot不接受列表作为输入.

#Does not work
plot2 <-function(...){
plot(...)

dots <<-list(...)
print(dots)
if("type" %in% names(dots)) dots$type="l"
print(dots)

svg("c:/temp/out.svg")
plot(dots)
dev.off()
}
plot2(1:10, type="o")
Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' is a list, but does not have components 'x' …
Run Code Online (Sandbox Code Playgroud)

r

9
推荐指数
1
解决办法
138
查看次数

从fread中提取行数而不读取整个文件

我有一个大文本文件(475,000,000行).我想快速获取文件中的行数而不读取它.

freaddata.table实际行号出现相当迅速(约10秒),则进行读取整个文件之前:

fread('D:/text_file.txt',select=1,colClasses="character")
Read 7.1% of 472933221 rows #number of rows appears after 10 seconds
Run Code Online (Sandbox Code Playgroud)

有没有办法提取这个行号而不读取整个文件?对于记录,读取整个文件需要36秒.

我尝试过countLines,R.utils但需要53秒.不同之处可能是fread只有一个列可以选择而countLines会读取所有内容.

R.utils::countLines("D:/text_file.txt") #53 seconds
Run Code Online (Sandbox Code Playgroud)

我也尝试过其他Windows方法,例如:

find /v /c "" "D:\text_file.txt" #takes 1 minute 50 seconds
grep "^" D:\text_file.txt | wc -l #takes 2 minutes
Run Code Online (Sandbox Code Playgroud)

这些工作,但他们没有那么快fread.我在Windows上.

windows r data.table

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

在data.table中匹配滞后组

我正在尝试创建一个新列,指示前一个组中是否存在ID.这是我的数据:

data <- data.table(ID = c(1:3, c(9,2,3,4),c(5,1)),
                   groups = c(rep(c("a", "b", "c"), c(3, 4,2))))
   ID groups
1:  1      a
2:  2      a
3:  3      a
4:  9      b
5:  2      b
6:  3      b
7:  4      b
8:  5      c
9:  1      c
Run Code Online (Sandbox Code Playgroud)

我不确定如何指定滞后组.我尝试使用shift,但它不起作用:

data[,.(ID=ID,match_lagged=ID %in% shift(ID)),by=groups]
Run Code Online (Sandbox Code Playgroud)

这是我想要的结果.

前3行不匹配,因为没有以前的组.FALSE也适用于这三行.ID = 4(在组b中)在组a中不匹配.ID = 5(在组c中)在组b中不匹配.

请注意,组c中的ID 1在组b中不匹配,因此即使它存在于组a中也应该为false.这就是为什么duplicated(data$ID)不起作用.来自组的数据必须与前一组匹配.

groups ID match_lagged
1:      a  1         NA
2:      a  2         NA
3:      a  3         NA
4:      b  9         FALSE …
Run Code Online (Sandbox Code Playgroud)

r match matching dplyr data.table

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

带有部分嵌套列表的cbind

我想cbind还是unnestas.data.table部分嵌套列表.

id <- c(1,2)
A <- c("A1","A2","A3")
B <- c("B1")
AB <- list(A=A,B=B)
ABAB <- list(AB,AB)
nested_list <- list(id=id,ABAB=ABAB)
Run Code Online (Sandbox Code Playgroud)

lengthID的相同ABAB(2在这种情况下).我不知道unlist该列表的一部分(ABAB)和cbind另一部分(id).这是我想要的结果data.table:

data.table(id=c(1,1,1,2,2,2),A=c("A1","A2","A3","A1","A2","A3"),B=rep("B1",6))
   id  A  B
1:  1 A1 B1
2:  1 A2 B1
3:  1 A3 B1
4:  2 A1 B1
5:  2 A2 B1
6:  2 A3 B1
Run Code Online (Sandbox Code Playgroud)

r list nested-lists data.table

6
推荐指数
2
解决办法
185
查看次数

na.locf使用来自dplyr的group_by

我正在尝试使用包含分组数据的na.locf包.我在这个问题上使用第一个解决方案:使用dplyr窗口函数来设置尾随值(填写NA值)zoodplyr

library(dplyr);library(zoo)
df1 <- data.frame(id=rep(c("A","B"),each=3),problem=c(1,NA,2,NA,NA,NA),ok=c(NA,3,4,5,6,NA))
df1
  id problem ok
1  A       1 NA
2  A      NA  3
3  A       2  4
4  B      NA  5
5  B      NA  6
6  B      NA NA
Run Code Online (Sandbox Code Playgroud)

当在一个组内,所有数据都是NA时,就会出现问题.正如您在问题列中看到的那样na.locf,id = B 的数据来自另一个组:id = A的最后一个数据.

df1 %>% group_by(id) %>% na.locf()

Source: local data frame [6 x 3]
Groups: id [2]

     id problem    ok
  <chr>   <chr> <chr>
1     A       1  <NA>
2     A       1     3
3     A       2     4
4 …
Run Code Online (Sandbox Code Playgroud)

r zoo dplyr

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

使用 data.table 按组删除特定列中具有前导缺失值的行

我有一个像这样的 data.table:

DT <- data.table(id = c(rep("a", 3), rep("b", 3)),
                 col1 = c(NA,1,2,NA,3,NA), col2 = c(NA,NA,5,NA,NA,NA))
   id col1 col2
1:  a   NA   NA
2:  a    1   NA
3:  a    2    5
4:  b   NA   NA
5:  b    3   NA
6:  b   NA   NA
Run Code Online (Sandbox Code Playgroud)

对于每个 id,我想使用 删除 'col1' 中带有前导 s 的行。这是我期待的结果:NAzoo::na.trim

   id col1 col2
1:  a    1   NA
2:  a    2    5
3:  b    3   NA
4:  b   NA   NA
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试过的。这确实删除了NA“col1”中的前导,但它从结果中省略了“col2”:

DT[ , na.trim(col1), by = …
Run Code Online (Sandbox Code Playgroud)

r zoo na data.table

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

与 data.table 的滚动关联

我正在尝试在两者之间建立滚动相关性data.table

\n\n
dt <- data.table(a=-1:10,b=1:12)\n> dt\n     a  b\n 1: -1  1\n 2:  0  2\n 3:  1  3\n 4:  2  4\n 5:  3  5\n 6:  4  6\n 7:  5  7\n 8:  6  8\n 9:  7  9\n10:  8 10\n11:  9 11\n12: 10 12\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我尝试使用rollapplyzoo

\n\n
library(zoo)\ndt[,rcor:=rollapplyr(as.list(a,b),width=5,\n                     FUN=function(y) {return(cor(y[[1]],y[[2]]))},fill=NA)]  \n\nError in zoo(data) : \xe2\x80\x9cx\xe2\x80\x9d : attempt to define invalid zoo object\n
Run Code Online (Sandbox Code Playgroud)\n\n

并与roll_cor来自roll

\n\n
library(roll)\nroll_cor(dt[,.(a,b)],5) \nError in roll_cor(dt[, .(a, b)], 5) : …
Run Code Online (Sandbox Code Playgroud)

r zoo data.table

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

如何从一步回归中提取公式?

我正在进行逐步回归,我想提取最终公式,以便在另一个回归中使用它.

使用此示例:

lm1 <- lm(Fertility ~ ., data = swiss)
slm1 <- step(lm1)
Run Code Online (Sandbox Code Playgroud)

我希望能够将其分配给公式对象:

Fertility ~ Agriculture + Education + Catholic + 
    Infant.Mortality
Run Code Online (Sandbox Code Playgroud)

regression r

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

laped与嵌套列表

我有一个嵌套列表,我想lapply as.data.frame在最深的嵌套级别,然后rbindlist(从data.table)一切.这是我的数据:

a <- list(date="2017-01-01",ret=1:5)
b <- list(date="2017-01-02",ret=7:9)
lvl3 <- list(a,b) 
lvl2 <- list(lvl3,lvl3)
lvl1 <- list(lvl2,lvl2,lvl2)
Run Code Online (Sandbox Code Playgroud)

如果我只有lvl3,我会将其转换为a data.framerbind数据:

rbindlist(lapply(lvl3,as.data.frame))
         date ret
1: 2017-01-01   1
2: 2017-01-01   2
3: 2017-01-01   3
4: 2017-01-01   4
5: 2017-01-01   5
6: 2017-01-02   7
7: 2017-01-02   8
8: 2017-01-02   9
Run Code Online (Sandbox Code Playgroud)

我将如何从lvl1和rbind所有嵌套中做到这一点data.frames?这不起作用:

rbindlist(lapply(lvl1,as.data.frame))

所需结果包含48行:

         date ret
 1: 2017-01-01   1
 2: 2017-01-01   2
 3: 2017-01-01   3
 4: 2017-01-01   4
 5: 2017-01-01   5
 6: …
Run Code Online (Sandbox Code Playgroud)

r list data.table

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

geom_text中的数学符号错误

在文本中插入数学符号应该不是那么复杂我想!

OTH,甚至用数学表达式查看类似的例子 ggplot2 facet_wrap

我仍然无法插入Ω(Omega)符号geom_text!

假设您有基本的散点图,并且您希望将(Omega)数学符号的平均值添加到每个方面,

mean.Petal <- aggregate(iris["Petal.Width"], iris["Species"], mean)
    Species     Petal.Width
1     setosa       0.246
2 versicolor       1.326
3  virginica       2.026

ggplot(iris) +
  geom_point(aes(y=Sepal.Length,x=Sepal.Width ,col=factor(Species))) + 
  facet_wrap(~ Species)+
  geom_text(data = mean.Petal, parse = TRUE,
            aes(x = 4.5, y = 7, label=sprintf('mean_Petal=%.2f %s', 
                                               round(Petal.Width,digits=2),'Omega')))
Run Code Online (Sandbox Code Playgroud)

解析时出错(text = as.character(lab)):: 1:17:意外符号1:mean_Petal = 0.25欧米茄

另一个尝试

geom_text(data = mean.Petal, parse = TRUE,
          aes(x = 4.5, y = 7, label=paste('mean_Petal=', 
                                  round(Petal.Width,digits=2),expression(Omega),sep=' ')))
Run Code Online (Sandbox Code Playgroud)

解析时出错(text = as.character(lab))::: 1:18:意外符号1:mean_Petal = 0.25欧米茄

math r ggplot2

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

拆散所需的替代方案

我在一列中有一些不规则的数据.

my.table <-read.table(text="ticker,date,last
a,12/20/2011,289295
a,12/21/2011,NA
a,12/27/2011,297001
a,12/28/2011,NA
b,12/20/2011,151253
b,12/21/2011,NA
b,12/27/2011,152413
b,12/28/2011,NA
b,1/4/2012,NA
d,12/21/2011,98.52
d,12/28/2011,99.36
d,1/4/2012,103.22", header=TRUE, as.is=TRUE,sep = ",")
Run Code Online (Sandbox Code Playgroud)

我通常unstack用来重塑data.frame中的数据.但是unstack不起作用,因为元素的数量不同,不能以data.frame格式.

my.expression <-last~ticker
unstacked <- unstack(my.table, my.expression ) #Not a data.frame
Run Code Online (Sandbox Code Playgroud)

我希望我的表看起来像这样:

               a       b     c
12/20/2011  289295  151253   NA
12/21/2011  NA      NA     98.52
12/27/2011  297001  152413   NA
12/28/2011  NA      NA     99.36
1/4/2012    NA      NA     103.22
Run Code Online (Sandbox Code Playgroud)

r

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

按变量分组,然后查找 R 中每列缺失值的比例

我有一个带有因子变量的数据框和带有几个 NA 的列,如图所示。

var col1 col2 col3
C    1    NA   1
A    NA   1    1 
C    NA   NA   NA
A    1    NA   1
B    NA   1    1
A    1    1    1
B    1    NA   1
B    1    1    1
C    NA   NA   1
B    NA   1   1
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种对变量进行分组并获取每列缺失值的比例的方法,并按“var”中的级别进行分组。输出应如下所示:

var col1 col2 col3
A    0.33 0.33  0
B    0.5  0.25  0 
C    0.66 1.00  0.33
Run Code Online (Sandbox Code Playgroud)

任何方法都可以,并且会赞赏不同的方法,但首选简单的 dplyr 方法。谢谢!

编辑:我正在寻找一种方法,该方法允许我一次对多个列执行此操作,并返回与我上面显示的数据框类似的数据框。

假设我的数据名为“df”,那么我想立即获取所有列的缺失比例,而不必再次手动输入名称。

以下代码不起作用,但它是我想要实现的目标的总体思路。也许一个函数可以提供帮助,但我不确定如何处理它。

df %>% group_by(var) %>% summarise(names(df[,-1]) = sum(is.na(names(df[,-1])))/n())

r dplyr tidyverse

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

标签 统计

r ×13

data.table ×6

dplyr ×3

zoo ×3

list ×2

ggplot2 ×1

match ×1

matching ×1

math ×1

na ×1

nested-lists ×1

regression ×1

tidyverse ×1

windows ×1