【问题标题】:change a variable value according to others variables values in R根据R中的其他变量值更改变量值
【发布时间】:2013-05-24 21:46:56
【问题描述】:

我想根据同一数据框中其他变量的值更改(或保留)我的数据框的值。我一直在寻找和回答,但没有成功。这是我拥有的数据库的一个示例:

    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

【问题讨论】:

  • 实际数字是否必须相同。如果你只需要用一个整数来区分它们,你可以做data$new &lt;- as.numeric(data$date)
  • 或者,如果你想要相同的数字,但最后一天只需要一个 8,而这些是你仅有的日期,你可以试试df$new &lt;- df$date ; levels(df$new) &lt;- c(4,5,6,7,1,2,3,8)
  • 为什么不按日期汇总???????
  • 谢谢@SimonO101,但如果1-7 的数字完全任意化,我可以这样做(第二个)吗?我的意思是,并不总是有 4、5、6、7、1、2、3,它们可以是 1、2、3、4、5、6、7。 2、3、4、5、6、7等……

标签: r if-statement for-loop


【解决方案1】:

你的描述

每个数字代表一天(1:星期一,2:星期二,...)并且每一天都有 数百条数据,而且信息是8天的,所以会有 一天重复(但在不同的日期)。

实际上是儒略日期的定义。此函数包含在基本 R 中。我认为您不需要任何循环,它只是 2 行代码。仅供参考 - 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

【讨论】:

  • 非常感谢。这正是我一直在寻找的,我以完全不同的方式解决了我的问题,但你的答案似乎真的是在未来这样的情况下最好的选择。
猜你喜欢
  • 2023-01-02
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 2016-05-29
  • 1970-01-01
  • 2020-05-24
  • 2022-12-08
相关资源
最近更新 更多