小编use*_*721的帖子

用最新的非NA值替换NA

在data.frame(或data.table)中,我想用最近的非NA值"填充"NA.一个简单的例子,使用向量(而不是a data.frame)如下:

> y <- c(NA, 2, 2, NA, NA, 3, NA, 4, NA, NA)
Run Code Online (Sandbox Code Playgroud)

我想要一个fill.NAs()允许我构造的函数yy:

> yy
[1] NA NA NA  2  2  2  2  3  3  3  4  4
Run Code Online (Sandbox Code Playgroud)

我需要对许多(总计~1 Tb)小尺寸data.frames(~30-50 Mb)重复此操作,其中一行是NA,其所有条目都是.解决问题的好方法是什么?

我做的丑陋的解决方案使用这个功能:

last <- function (x){
    x[length(x)]
}    

fill.NAs <- function(isNA){
if (isNA[1] == 1) {
    isNA[1:max({which(isNA==0)[1]-1},1)] <- 0 # first is NAs 
                                              # can't be forward filled
}
isNA.neg <- isNA.pos <- isNA.diff <- diff(isNA)
isNA.pos[isNA.diff < 0] <- …
Run Code Online (Sandbox Code Playgroud)

r zoo r-faq data.table

129
推荐指数
11
解决办法
7万
查看次数

R:在向空数据帧添加行时丢失列名

我刚刚开始使用R并遇到一个奇怪的行为:当在空数据框中插入第一行时,原始列名称会丢失.

例:

a<-data.frame(one = numeric(0), two = numeric(0))
a
#[1] one two
#<0 rows> (or 0-length row.names)
names(a)
#[1] "one" "two"
a<-rbind(a, c(5,6))
a
#  X5 X6
#1  5  6
names(a)
#[1] "X5" "X6"
Run Code Online (Sandbox Code Playgroud)

如您所见,列名12X5X6替换.

有人可以告诉我为什么会这样,并且有没有正确的方法来做到这一点而不会丢失列名?

霰弹枪解决方案是将名称保存在辅助矢量中,然后在完成数据帧处理后将其添加回来.

谢谢

语境:

我创建了一个函数,它收集一些数据并将它们作为新行添加到作为参数接收的数据帧中.我创建数据框,遍历我的数据源,将data.frame传递给每个函数调用以填充其结果.

r names dataframe rbind

62
推荐指数
4
解决办法
3万
查看次数

如何从R中的列表列表中提取元素?

我有一堆包含列表的列表(广义线性模型输出).我想编写一个函数,它将从每个列表中提取几个元素,然后将结果合并到一个数据框中.

我想提取modelset[[1]]$likelihood&modelset[[1]]$fixef,modelset[[2]]$likelihood&modelset[[2]]$fixef等,并将结果合并到一个数据框中.

有人能告诉我如何做到这一点吗?

如果我的问题令人困惑,请道歉:我想要做的是超出我有限的编程理解.

关于我的清单的更多信息:

modelset: Large list (16 elements, 7.3Mb)
    :List of 29
    ..$ fixef           : Named num [1:2] -1.236 -0.611
    .. ..- attr(*, "names")= chr [1:2] "(Intercept)" "SMIstd"
    ..$ likelihood      :List of 4
    .. ..$ hlik: num 238
    .. ..$ pvh : num 256
    .. ..$ pbvh: num 260
    .. ..$ cAIC: num 567

    ...etc  
Run Code Online (Sandbox Code Playgroud)

r list

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

fread无法读取第一列为空的.csv文件

说我有第一个test.csv看起来像这样

,a,b,c,d,e
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用read.csv它,它工作正常.

read.csv("test.csv",header=FALSE)
#  V1 V2 V3 V4 V5 V6
#1 NA  a  b  c  d  e
#Warning message:
#In read.table(file = file, header = header, sep = sep, quote = quote,  :
#  incomplete final line found by readTableHeader on 'test.csv'
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用读取此文件,则会fread收到错误.

require(data.table)
fread("test.csv",header=FALSE)
#Error in fread("test.csv", header = FALSE) : 
#  Not positioned correctly after testing format of header row. ch=','
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该怎么做才能纠正这个问题?

csv r data.table

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

将汇总统计信息(甚至原始数据点)添加到躲避位置箱图

假设您有以下数据集:

trt &lt;- ifelse(runif(100)&lt;0.5,"drug","placebo")
inj.site &lt;- ifelse(runif(100)&lt;0.5,"ankle","wrist")
relief &lt;- 20 + 0.5*(inj.site=="ankle") + 0.5*(trt=="drug") + rnorm(100)
to.analyze &lt;- data.frame(trt,inj.site,relief)
Run Code Online (Sandbox Code Playgroud)

现在,我们的想法是在x轴上制作一个带有损伤部位的箱线图,并通过并排处理制作盒子:

bplot &lt;- ggplot(to.analyze,aes(inj.site,relief,fill=trt)) + geom_boxplot(position="dodge")
Run Code Online (Sandbox Code Playgroud)

很容易.但现在我想在盒子顶部添加原始数据点.如果我没有盒子position="dodge",这很容易:

bplot + geom_point(aes(colour=trt))
Run Code Online (Sandbox Code Playgroud)

但是,这会在框之间绘制点,并且添加position="dodge"到此几何图形似乎不起作用.如何调整此值以便在框上绘制点?

奖励:使用stat_summary(blah,y.fun=mean,shape="+")过度绘制手段的情况相同,具有相同的问题.

algorithm r ggplot2

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

如何在分组变量的条件下回归单个系列的多个系列?

我觉得我的基本问题是如何在一个系列中回归多个系列.虽然我的系列时间不相等,但即使我使用相同的时间长度系列进行库存和基准测试(我可以根据需要提供我手动相等的数据),我收到错误.我想估计一个市场模型(即,对于所有股票,每天对基准回报的股票回报进行回归),并以长格式从回归中得出β值的数据框.因此,对于提供的样本,β值数据框中将有4个beta值(ABC为2,XYZ为2).这是两个股票价格的样本

idf <- structure(list(Firm = c("ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC",
  "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "XYZ", "XYZ", "XYZ",
  "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ",
  "XYZ"), Date = structure(c(NA, 1451642400, 1451646000, 1451649600, 1451653200,
  1451656800, 1451660400, 1451664000, 1451898000, 1451901600, 1451905200,
  1451908800, 1451912400, 1451916000, 1451919600, NA, 1451642400, 1451646000,
  1451649600, 1451653200, 1451656800, 1451660400, 1451664000, 1451898000,
  1451901600, 1451905200, 1451908800, 1451912400, 1451916000, 1451919600),
  tzone = "UTC", class = c("POSIXct", "POSIXt")), Price = c(1270.9, 1277,
  1273.25, 1273.85, …
Run Code Online (Sandbox Code Playgroud)

regression r xts dplyr plm

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

用于从字符串的某些位置删除字符的可用功能

我正在寻找一个基于位置对字符串执行删除操作的函数.

例如,给定字符串就是这样

string1 <- "hello stackoverflow"
Run Code Online (Sandbox Code Playgroud)

假设,我想删除第4,第10和第18个职位.

首选输出

"helo stakoverflw"
Run Code Online (Sandbox Code Playgroud)

我不确定这种功能是否存在.

r

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

基于列值在R中编号

Name Grade
John   C
John   C+
John   C
John   B
John   A
John   A+
Kat    B
Kat    C
Kat    B
Run Code Online (Sandbox Code Playgroud)

我想添加一个新列,Months从3开始,然后继续其倍数.行都是排序的.输出看起来像

Name Grade Months
John   C     3
John   C+    6
John   C     9
John   B     12
John   A     15
John   A+    18
Kat    B     3
Kat    C     6
Kat    B     9
Run Code Online (Sandbox Code Playgroud)

RCODE

name <- df$Name[1]
count <- 0
for (i in 1:length(df[,1])){
    if (name!=df$Name[i]){
        count <- 0
        name <- df$Name[i]
     }
    df$Months[i] <- count
    count <- count + …
Run Code Online (Sandbox Code Playgroud)

r dataframe

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

标签 统计

r ×8

data.table ×2

dataframe ×2

algorithm ×1

csv ×1

dplyr ×1

ggplot2 ×1

list ×1

names ×1

plm ×1

r-faq ×1

rbind ×1

regression ×1

xts ×1

zoo ×1