将变量添加到数据集(如果它不存在)
问题描述:
在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
答
你实际上只是缺少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
答
不完全确定你所需要的,因为没有一个明显的例子,但你要找的东西,如:
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
没有一个重复的例子,这是很难说,但使用的因素可能有帮助。 – A5C1D2H2I1M1N2O1R2T1 2014-09-25 12:54:40