小编Aru*_*run的帖子

R如何根据另一个变量的范围获得一个变量的平均值?

如果我有两个变量X和Y的一系列观察,我怎样才能根据变量X的范围得到Y的平均值?

例如,有些数据如下:

df = data.frame(x=runif(50,1,100),y=runif(50,300,700))

我怎么能得到答案"当X为1-10时,平均值为332.4,当X为11-20时,y的平均值为632.3,等等......"

aggregate r dataframe

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

在预先排序的列中合并R中的数据帧?

我通常使用大型数据帧,这些数据帧排序很好(或者可以很容易地排序).

给定两个数据帧,两者都按'用户'排序

some.data <user> <data_1> <data_2> 
user <user> <user_attr_1> <user_attr_2>
Run Code Online (Sandbox Code Playgroud)

我跑m = merge(some.data,user),我得到的结果如下:

m = <user> <data_1> <data_2> <user_attr_1> <user_attr_2>
Run Code Online (Sandbox Code Playgroud)

这很好.

但是merge没有利用这些数据帧在公共列上排序,使得合并相当漂亮的CPU /内存很重.但是,这个合并可以在O(n)中完成

我想知道在R中是否有办法对排序数据集进行有效合并?

merge r dataframe

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

为什么这么慢?(循环在DF行与独立向量)

我有一段代码,总耗时约为30秒,下面的代码大约是27秒.我将违规代码缩小到这个:

d$dis300[i] <- h
Run Code Online (Sandbox Code Playgroud)

所以我换到另一件,现在工作得非常快(正如预期的那样).

我的问题是为什么这对第二个太慢了.数据DF约为7500x18变量

第一:( 27秒过去了)

d$dis300 <- 0
for (i in 1:netot) {
  h <- aaa[d$ent[i], d$dis[i]]
  if (h == 0) writeLines(sprintf("ERROR. ent:%i dis:%i", d$ent[i], d$dis[i]))
  d$dis300[i] <- h
}
Run Code Online (Sandbox Code Playgroud)

第二:(0.2秒过去了)

d$dis300 <- 0
for (i in 1:netot) {
  h <- aaa[d$ent[i], d$dis[i]]
  if (h == 0) writeLines(sprintf("ERROR. ent:%i dis:%i", d$ent[i], d$dis[i]))
  foo[i] <- h
}
d$foo <- foo
Run Code Online (Sandbox Code Playgroud)

你可以看到两者都是"相同的",但有一个人有这个DF而不是一个向量.

任何评论都非常感谢.我来自另一种语言,这让我疯了一会儿.至少我有解决方案,但我希望将来能够防止这类问题.

谢谢你的时间,

performance r

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

有条件地从数据框中删除行(多个条件)

我已经搜索了SO,虽然有很多关于有条件删除行的QA但没有QA适合我的问题.

我有一个data.frame可变的含纵向测量x,y...,在各个时间点等time,在若干受试者id.一些受试者经历事件ev(表示为1,否则0在某些情况下time).我想将初始值减少data.frame到:

  • 1)所有具有未经历过事件的主题的行(好的,那很容易)但也包括
  • 2)对于经历过事件的主体,事件之前的所有行(即所有行的次数都少于该个体事件发生的时间).

以便,

testdf<-data.frame(id=c(rep("A",4),rep("B",4),rep("C",4) ),
                   x=c(NA, NA, 1,2, 3, NA, NA, 1, 2, NA,NA, 5), 
                   y=rev(c(NA, NA, 1,2, 3, NA, NA, 1, 2, NA,NA, 5)),
                   time=c(1,2,3,4,0.1,0.5,10,20,3,2,1,0.5),
                   ev=c(0,0,0,0,0,1,0,0,0,0,0,1))
Run Code Online (Sandbox Code Playgroud)

会减少到

   id  x  y time ev
1   A NA  5  1.0  0
2   A NA NA  2.0  0
3   A  1 NA  3.0  0
4   A  2  2  4.0  0
5 …
Run Code Online (Sandbox Code Playgroud)

conditional r dataframe

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

大写数据框中的第一个字母

继承我的数据,

> data
   Manufacturers       Models
1   audi                RS5  
2   bmw                 M3  
3   cadillac            CTS-V  
4   lexus               ISF
Run Code Online (Sandbox Code Playgroud)

我想要在第一列的第一个字母大写,如下所示:

> data
   Manufacturers       Models
1   Audi                RS5  
2   Bmw                 M3  
3   Cadillac            CTS-V  
4   Lexus               ISF
Run Code Online (Sandbox Code Playgroud)

我很感激这个问题的任何帮助.非常感谢.

r dataframe uppercase

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

数据集的不规则列表列表

有问题.我需要将一个不规则的列表列表转换为宽格式的data.frame(即我需要相同数量的行),我只是无法弄清楚如何做到这一点.列表看起来像这样:

[[1]]
[1] 14

[[2]]
[1] 26

[[3]]
[1] 20 21 22 23

[[4]]
[1] 21 22

[[5]]
[1] 25

[[6]]
[1] 17 21 23
Run Code Online (Sandbox Code Playgroud)

我尝试过使用for循环和/或sapply的各种方法,但没有任何作用.不同长度的列表元素排除了我所做的任何尝试.在我看来,必须有一种相当直接的方法来做到这一点.一定不是吗?任何人都可以建议吗?

r list dataframe

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

范围连接data.frames - 具有R中的日期范围/间隔的特定日期列

虽然这个细节当然是应用程序特定的,但在SO精神中,我试图尽可能地保持这一点!基本问题是当一个data.frame具有特定日期而另一个具有日期范围时,如何按日期合并data.frames.其次,问题是如何处理给定变量的多个观察,以及如何将它们包含在最终输出data.frame中.我敢肯定其中一些是标准的,但一个非常完整的搜索几乎没有透露.

我正在尝试合并的mre对象如下.

# 'Speeches' data.frame
structure(list(Name = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("BBB", 
"AAA"), class = "factor"), Date = structure(c(12543, 12404, 12404, 
12404, 12373, 12362, 12345, 12320, 12207, 15450, 15449, 15449, 
15449, 15449, 15449, 15449, 15449, 15448, 15448, 15448), class = "Date")), .Names =     c("Name", 
"Date"), row.names = c("1", "1.1", "1.2", "1.3", "1.4", "1.5", 
"1.6", "1.7", "1.8", "2", "2.1", "2.2", "2.3", "2.4", "2.5", …
Run Code Online (Sandbox Code Playgroud)

merge r intervals dataframe data.table

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

根据R中面板中的不同data.frame创建滞后向量

我有两个data.frames,一个有事件数据,另一个有几个公司的股票数据(这里只有两个).我希望在我的事件data.frame中为两家公司增加两个日期滞后(-1天和+1天)的列.滞后日期应该来自我的库存数据.框架(df)当然.我怎样才能做到这一点?

DATE <- c("01.01.2000","02.01.2000","03.01.2000","06.01.2000","07.01.2000","09.01.2000","10.01.2000","01.01.2000","02.01.2000","04.01.2000","06.01.2000","07.01.2000","09.01.2000","10.01.2000")
RET <- c(-2.0,1.1,3,1.4,-0.2, 0.6, 0.1, -0.21, -1.2, 0.9, 0.3, -0.1,0.3,-0.12)
COMP <- c("A","A","A","A","A","A","A","B","B","B","B","B","B","B")
df <- data.frame(DATE, RET, COMP)

df

# DATE   RET COMP
# 1  01.01.2000 -2.00    A
# 2  02.01.2000  1.10    A
# 3  03.01.2000  3.00    A
# 4  06.01.2000  1.40    A
# 5  07.01.2000 -0.20    A
# 6  09.01.2000  0.60    A
# 7  10.01.2000  0.10    A
# 8  01.01.2000 -0.21    B
# 9  02.01.2000 -1.20    B
# 10 04.01.2000  0.90    B
# 11 06.01.2000 …
Run Code Online (Sandbox Code Playgroud)

merge r lag

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

将编码应用于整个Data.Table

我将以下文件读入data.table,如下所示:

raw <- fread("avito_train.tsv", nrows=1000)
Run Code Online (Sandbox Code Playgroud)

然后,如果我改变特定列和行的编码,如下所示:

Encoding(raw$title[2]) <- "UTF-8"
Run Code Online (Sandbox Code Playgroud)

它完美地运作.

但是,如何将编码应用于所有列和所有行?

我检查了fread文档,但似乎没有任何编码选项.此外,我试过,Encoding(raw)但这给了我一个错误(预期的字符向量参数).

编辑:本文详细介绍了有关Windows上RStudio中外来文本的更多信息http://quantifyingmemory.blogspot.com/2013/01/r-and-foreign-characters.html

encoding r dataframe data.table

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

按多个条件匹配和替换数据框的列

干杯,我有两个数据框,具有以下结构.

DF1:
Airlines           HeadQ      Date           Cost_Index
American           PHX        07-31-2016     220
American           ATL        08-31-2016     150
American           ATL        10-31-2016     150
Delta              ATL        10-31-2016     180
American           ATL        08-31-2017     200
Run Code Online (Sandbox Code Playgroud)

第二数据帧DF2具有以下结构:

DF2:
Airlines           HeadQ      Date          
American           ATL        09-30-2016
Delta              ATL        03-31-2017
Run Code Online (Sandbox Code Playgroud)

现在查看数据帧DF1和DF2,我想将DF1改为以下数据帧.

DF1:
Airlines           HeadQ      Date           Cost_Index
American           PHX        07-31-2016     220
American           ATL        08-31-2016     0
American           ATL        10-31-2016     150
Delta              ATL        10-31-2016     180
American           ATL        08-31-2017     200
Run Code Online (Sandbox Code Playgroud)

条件是,从DF2查找DF1的航空公司和HeadQ,如果DF1 $ Date <DF2 $ Date,则将Cost_Index设为0,否则继续使用Cost_Index.

我尝试了,但未成功,:

DF1$Cost_Index <- ifelse(DF1$Airlines == DF2$Airlines & DF1$HeadQ == DF2$HeadQ 
        & …
Run Code Online (Sandbox Code Playgroud)

datetime r dataframe dplyr

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