2014-09-25 65 views
2

在R中工作,我需要为丢失的日子添加一列零(如果有的话)。将变量添加到数据集(如果它不存在)

我正在处理一些包含日期的数据集。我觉得每个日期(day.received),然后当天使用:

dcast(data, ... ~ day.received) 

这令我天为列,并给出计数的适用记录数。完善!

但是,我发现如果我一天没有任何记录,我没有在我播放时创建一个列。这让我的代码在整个地方抛出错误,因为我的数据框不再是预期的长度,并且没有找到任何对缺少日期的列的引用。

下面是一个例子:

set.seed(42) 
days <- factor(c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday','Saturday', 'Sunday'), 
      c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday','Saturday', 'Sunday')) 
data <- data.frame(Place = sample(c('A','B','C'),replace = TRUE, 50), 
     day.received = sample(days, 50, replace=TRUE)) 
data$day.received[data$day.received == 'Friday'] <- "Saturday" 
data <- dcast(data, ... ~ day.received) 
data 

很显然,我可以使用%的%找到是否周一到周日都在colnames,但如何利用这些信息来增加零点一列失踪天?我可以计算出我需要添加向量的长度,让我们说这是10

+0

没有一个重复的例子,这是很难说,但使用的因素可能有帮助。 – A5C1D2H2I1M1N2O1R2T1 2014-09-25 12:54:40

回答

1

你实际上只是缺少drop说法:

dcast(data, ... ~ day.received, drop = FALSE) 
# Using day.received as value column: use value.var to override. 
# Aggregation function missing: defaulting to length 
# Place Monday Tuesday Wednesday Thursday Friday Saturday Sunday 
# 1  A  2  4   1  1  0  2  0 
# 2  B  3  2   2  2  0  7  1 
# 3  C  3  4   4  3  0  7  2 
2

不完全确定你所需要的,因为没有一个明显的例子,但你要找的东西,如:

days <- days.of.week <- weekdays(x=as.Date(seq(7), origin="1950-01-01")) 
days 

## [1] "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday" 

set.seed(1492) # make reproducible 

# fabricated data frame with missing weekdays 

data <- data.frame(
    Sunday=sample(1:100, 10), 
    Tuesday=sample(1:100, 10), 
    Thursday=sample(1:100, 10)) 

head(data, 3) 

## Sunday Tuesday Thursday 
## 1  28  65  64 
## 2  22  64  38 
## 3  19  20  13 

# fill in missing columns 

data[, setdiff(days, colnames(data))] <- 0 
head(data, 3) 

## Sunday Tuesday Thursday Monday Wednesday Friday Saturday 
## 1  28  65  64  0   0  0  0 
## 2  22  64  38  0   0  0  0 
## 3  19  20  13  0   0  0  0 
+0

我不知道你可以用这种方式添加列。这只是我试图解决的问题,抱歉让你盲目,但你钉了它。 – Pyrosopher 2014-09-25 13:31:42

相关问题