小编Jaa*_*aap的帖子

使用R中的data.table包的笛卡尔积

使用R中的data.table包,我试图使用merge方法创建两个data.tables的笛卡尔积,就像在基数R中一样.

在基础上,以下工作:

#assume this order data
orders <- data.frame(date = as.POSIXct(c('2012-08-28','2012-08-29','2012-09-01')),
                     first.name = as.character(c('John','George','Henry')),
                     last.name = as.character(c('Doe','Smith','Smith')),
                     qty = c(10,50,6))

#and these dates
dates <- data.frame(date = seq(from = as.POSIXct('2012-08-28'),
                               to = as.POSIXct('2012-09-07'), by = 'day'))

#get the unique customers
cust<-unique(orders[,c('first.name','last.name')])

#using merge from base R, get the cartesian product
merge(dates, cust, by = integer(0))
Run Code Online (Sandbox Code Playgroud)

但是,使用data.table相同的技术不起作用,并抛出此错误:

"merge.data.table中的错误(dates.dt,cust.dt,by = integer(0)):需要一个非空的列名向量__CODE__."

"Error in merge.data.table(dates.dt, cust.dt, by = integer(0)) : 
  A non-empty vector of column names for `by` is required."
Run Code Online (Sandbox Code Playgroud)

我希望结果反映所有日期的所有客户名称,就像在base中一样,但是以data.table为中心的方式.这可能吗?

r data.table

15
推荐指数
2
解决办法
8071
查看次数

重塑宽格式,多列长格式

我想重塑一个宽格式数据集,该数据集具有多个测试,这些测试在3个时间点进行测量:

   ID   Test Year   Fall Spring Winter
    1   1   2008    15      16      19
    1   1   2009    12      13      27
    1   2   2008    22      22      24
    1   2   2009    10      14      20
    2   1   2008    12      13      25
    2   1   2009    16      14      21
    2   2   2008    13      11      29
    2   2   2009    23      20      26
    3   1   2008    11      12      22
    3   1   2009    13      11      27
    3   2   2008    17      12      23
    3   2   2009    14      9       31
Run Code Online (Sandbox Code Playgroud)

进入一个按列分隔测试的数据集,但将测量时间转换为长格式,对于每个新列,如下所示: …

r reshape melt reshape2

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

删除R中一列中包含非数字字符的行

在数据框中,列A应该是数字向量.

因此,如果列的条目具有任何非数字字符,我将删除相应的整行.

有没有人有办法解决吗?谢谢!

r

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

使用重复键在data.table上滚动连接

我想了解rolling joinsdata.table.最后给出了重现这一点的数据.

给出机场交易的数据表,在给定时间:

> dt
   t_id airport thisTime
1:    1       a      5.1
2:    3       a      5.1
3:    2       a      6.2  
Run Code Online (Sandbox Code Playgroud)

(注t_ids1和3有相同的机场和时间)

以及从机场起飞的航班查询表:

> dt_lookup
   f_id airport thisTime
1:    1       a        6
2:    2       a        6
3:    1       b        7
4:    1       c        8
5:    2       d        7
6:    1       d        9
7:    2       e        8

> tables()
     NAME      NROW NCOL MB COLS                  KEY             
[1,] dt           3    3  1 t_id,airport,thisTime airport,thisTime
[2,] dt_lookup    7    3 …
Run Code Online (Sandbox Code Playgroud)

join r data.table

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

在ggplot2和facet_wrap中,如何删除所有边距和填充但保留strip.text?

这可能主要是因为我误解panel.margin = unit(...)theme()函数中的工作原理......但是我无法按照我喜欢的方式自定义facet_wrap中的边距.基本上,我想要一个看起来像这样的facet_grid,strip.text每个facet中都有facet text(即)插入,并且每个facet之间没有spcaing:

(我在粉红色的边框中留下来显示每个方面的尺寸)

理想的最终产品

所以这是迄今为止的代码.

要设置数据和图:

library(ggplot2)
library(grid)
p <- ggplot() +
  geom_bar(data = mtcars, aes(x = cyl, y = qsec), stat = 'identity') +
  facet_wrap( ~ carb, ncol = 3)

mytheme <- theme_minimal() + theme(
  axis.text.x = element_blank(),
  axis.text.y = element_blank(),
  axis.ticks = element_blank(),
  axis.title = element_blank(),
  panel.margin = unit(0, "lines"),
  panel.border = element_rect(colour = rgb(1.0, 0, 0, 0.5), fill=NA, size=1)
)
Run Code Online (Sandbox Code Playgroud) 标准图
 p + mytheme
Run Code Online (Sandbox Code Playgroud)

只是一个标准的情节

完全删除strip.text
p + mytheme + theme(strip.text …
Run Code Online (Sandbox Code Playgroud)

visualization r ggplot2

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

删除重复组合(无论顺序如何)

我有一个整数数据帧,它是1 ... n的所有n选择3组合的子集.例如,对于n = 5,它类似于:

      [,1] [,2] [,3]
 [1,]    1    2    3
 [2,]    1    2    4
 [3,]    1    2    5
 [4,]    1    3    4
 [5,]    1    3    5
 [6,]    1    4    5
 [7,]    2    1    3
 [8,]    2    1    4
 [9,]    2    1    5
[10,]    2    3    4
[11,]    2    3    5
[12,]    2    4    5
[13,]    3    1    2
[14,]    3    1    4
[15,]    3    1    5
[16,]    3    2    4
[17,]    3    2    5
[18,]    3    4    5 …
Run Code Online (Sandbox Code Playgroud)

combinations r

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

如何为动态名称变量赋值

嗨,我正在尝试使用for循环命名变量,所以我获得了变量的动态名称.

for (i in 1:nX) {
    paste("X",i, sep="")=datos[,i+1]
    next
}
Run Code Online (Sandbox Code Playgroud)

r

14
推荐指数
2
解决办法
4万
查看次数

计算一年中的周数(0-53)

我有一个包含位置和日期的数据集.我想计算一年中的周数(00-53),但是使用星期四作为一周的第一天.数据如下所示:

  location <- c(a,b,a,b,a,b)
  date <- c("04-01-2013","26-01-2013","03-02-2013","09-02-2013","20-02-2013","03-03-2013")
  mydf <- data.frame(location, date)
  mydf
Run Code Online (Sandbox Code Playgroud)

我知道有一个strftime函数用于计算一年中的一周,但它只能使用星期一或星期日作为一周的第一天.任何帮助将受到高度赞赏.

r week-number date-arithmetic

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

合并匹配A,B和**C的数据帧?

我有两个这样的数据帧:

set.seed(1)
df <- cbind(expand.grid(x=1:3, y=1:5), time=round(runif(15)*30))
to.merge <- data.frame(x=c(2, 2, 2, 3, 2),
                       y=c(1, 1, 1, 5, 4),
                       time=c(17, 12, 11.6, 22.5, 2),
                       val=letters[1:5],
                       stringsAsFactors=F)
Run Code Online (Sandbox Code Playgroud)

我想合并to.mergedf(with all.x=T)这样:

  • df$x == to.merge$x
  • df$y == to.merge$y
  • abs(df$time - to.merge$time) <= 1; 在多个to.merge满足的情况下,我们选择最小化这个距离的那个.

我怎样才能做到这一点?

所以我想要的结果是(这只是为匹配的行添加df了相应的valueto.merge):

   x y time val
1  1 1    8  NA
2  2 1   11   c
3  3 1   17  NA
4  1 2 …
Run Code Online (Sandbox Code Playgroud)

r

14
推荐指数
2
解决办法
3267
查看次数

找到最快的方法来获取向量中相同元素之间的所有间隔

假设我有一个包含8个字母的字符向量,每个字符出现两次:

x <- rep(LETTERS[1:8],2)
set.seed(1)
y <- sample(x)
y

# [1] "E" "F" "A" "D" "C" "B" "C" "G" "F" "A" "B" "G" "E" "H" "D" "H"
Run Code Online (Sandbox Code Playgroud)

我想找到每对字母之间的间隔.这里,interval是指两个相同字母之间的字母数.我可以像这样手动完成:

abs(diff(which(y=="A")))-1  #6
abs(diff(which(y=="D")))-1  #10
abs(diff(which(y=="H")))-1  #1
Run Code Online (Sandbox Code Playgroud)

我写了一个for循环来做这个...

res<-NULL
for(i in 1:8){  res[[i]] <- abs(diff(which(y==LETTERS[i])))-1 }

names(res)<-LETTERS[1:8]
res

# A  B  C  D  E  F  G  H 
# 6  4  1 10 11  6  3  1 
Run Code Online (Sandbox Code Playgroud)

但是,我想在具有很长向量的随机化过程中使用这种方法.速度对此至关重要 - 我想知道是否有人有尽可能快速解决这个问题的好主意.

r

14
推荐指数
3
解决办法
879
查看次数