我想根据同一数据框中其他变量的值更改(或保留)我的数据帧的值。我一直在寻找和回答没有太大的成功。这是我拥有的数据库的一个例子:
date day VM id
12/01/2013 4 133 1
12/01/2013 4 163 1
13/01/2013 5 143 1
13/01/2013 5 123 1
14/01/2013 6 90 1
14/01/2013 6 190 1
15/01/2013 7 922 1
15/01/2013 7 952 1
16/01/2013 1 13 1
16/01/2013 1 25 1
17/01/2013 2 333 1
17/01/2013 2 123 1
18/01/2013 3 143 1
18/01/2013 3 169 1
19/01/2013 4 203 1
19/01/2013 4 133 1
每个数字代表一天(1:星期一,2:星期二,......),每天有数百个数据,信息也是8天,所以会有一天重复(但在不同的日期) 。当我应用摘要时它给了我混合重复日数据的信息,我想避免这种情况,我的想法是将使用的最后一天(重复的一天)更改为数字8,但重复的一天由id和我有足够的数据。到目前为止,我已经尝试过这个:
unicos<-unique(data$id)
data_corr<-NULL
for(j in 1:length(unicos))
subset<-data[which(data$id==unicos[j]),]
subset$day1<-NULL
times<-0
vector<-NULL
for(i in 1:(dim(subset)[1])){
if((subset$day[i]<-subset$day[1]) && if (subset$date[i]<-subset$date[1])){
vector<-c(vector, i)
times<-times+1
subset$day1[i]<-subset$day[1]
}
subset$day1<-8
}
Basal_corr<-rbind(Basal_corr, subset)
}
第一个“for”是指当时应用一个id的条件。第二部分是艰难的。我想要做的是,如果行[i]中的日期与第一行中的日期相同(因为它是将要重复的那一行),那么去检查日期,如果日期同样我也希望保持原始日期值在名为day1的新列中,如果日期不同,则day1值将为8.我使用Basal_corr&lt; -rbind(Basal_corr,子集)来跟踪所有由id做出的更改。每当我试图运行它时,我都会收到“错误”,而且我真的不知道我是一个R新手,这已经超出了我所知的范围。
答案 0 :(得分:0)
您描述的内容
每个数字代表一天(1:星期一,2:星期二,......),每天都有 数百个数据,也是8天的信息所以会有 有一天重复(但在不同的日期)。
实际上是朱利安日期的定义。这个函数包含在基数R中。我认为你不需要任何循环,它只是2行代码。 FYI-R与向量一起运算,因此函数同时指向整个向量/列的值。
Days$date <- as.Date(Days$date, format = "%d/%m/%Y")
Days$day <- julian(Days$date) - julian(Days$date[1]) + 1
Days # yields
# date day VM id
# 1 2013-01-12 1 133 1
# 2 2013-01-12 1 163 1
# 3 2013-01-13 2 143 1
# 4 2013-01-13 2 123 1
# 5 2013-01-14 3 90 1
# 6 2013-01-14 3 190 1
# 7 2013-01-15 4 922 1
# 8 2013-01-15 4 952 1
# 9 2013-01-16 5 13 1
# 10 2013-01-16 5 25 1
# 11 2013-01-17 6 333 1
# 12 2013-01-17 6 123 1
# 13 2013-01-18 7 143 1
# 14 2013-01-18 7 169 1
# 15 2013-01-19 8 203 1
# 16 2013-01-19 8 133 1