循环函数列名为R.

时间:2016-07-29 23:51:07

标签: r

我的数据具有以下形式:

 Individual Year    X2011Int    X2010Int    X2009Int   X2008Int   X2007Int
      1     2011    10.36703    18.07049    4789.338   51.3443    423.235
      2     2010    10.36703    18.07049    4789.338   51.3443    423.235
      3     2009    10.36703    18.07049    4789.338   51.3443    423.235
      4     2008    10.36703    18.07049    4789.338   51.3443    423.235

其中X2009Int,X2008Int,X2007Int列表示在指定时间段内特定事件的严重性。我的目标是创建一个函数,我可以循环遍历列以创建以下内容:

 Individual   Year            T        T-1           T-2
  1             2011     =X2011Int   =X2010Int    =X2009Int
  2             2010     =X2010Int   =X2009Int    =X2008Int
  3             2009     =X2009Int   =X2008Int    =X2007Int
  4             2008     =X2008Int   =X2007Int    =X2006Int

为了进一步说明2009年个人3的情况。在$ T栏下我需要X2009Int中的事件强度值,$ T-1列=来自X2008Int的值,$ T-2 = X2007Int,$ T -3 = X2006Int等(年份范围从2012-1980)

非常感谢任何帮助!

编辑:

跟进:

我的for循环仍然存在问题。第一次迭代完美地运行,但在此之后似乎不起作用。

指向数据/代码的链接是: https://drive.google.com/open?id=0B32x3hkj1P-IMWF6LVBoeE5tVFE

非常感谢任何提示/想法! :)

1 个答案:

答案 0 :(得分:3)

感谢您提供有用的更新。我想这就是你想要的:

randon()
Individual Year    X2009Int    X2010Int    X2011Int
1     2011    10.36703    18.07049    4789.338
2     2011    10.36703    18.07049    4789.338
3     2010    10.36703    18.07049    4789.338
4     2010    10.36703    18.07049    4789.338
5     2009    10.36703    18.07049    4789.338
6     2009    10.36703    18.07049    4789.338

d <- read.table(con <- file("clipboard"), header = T)

d1 <- data.frame(
  Individual = d$Individual,
  Year       = d$Year,
  T          = 0,
  "T-1"      = 0,
  "T-2"      = 0
)


# First let's rename the columns of the original data set to make it easier to use
nms <- colnames(d[,3:ncol(d)])
nms <- gsub("X", "", nms)
nms <- gsub("Int", "", nms)
nms <- c(colnames(d)[1:2],nms)

colnames(d) <- nms

# Now, let's populate the new data.frame
for(i in unique(d1$Year)){
  d1$T[d1$Year == i]    <- d[d$Year == i,colnames(d) == i]  
  d1$T1[d1$Year == i-1] <- d[d$Year == i-1,colnames(d) == i-1]  
  d1$T2[d1$Year == i-2] <- d[d$Year == i-2,colnames(d) == i-2]  

}

关注

好的,所以后续代码中会出现一些问题。

  1. 班级并没有真正改变。请注释掉Individual Year T T-1 T-2 1 1 2011 4789.33800 0 0 2 2 2011 4789.33800 0 0 3 3 2010 18.07049 18.07049 0 4 4 2010 18.07049 18.07049 0 5 5 2009 10.36703 10.36703 10.36703 6 6 2009 10.36703 10.36703 10.36703 语句并使用:

    transform

    d1$Year <- as.numeric(d1$Year)

  2. 认为您曾使用TOY2$Year <- as.numeric(TOY2$Year)来使用IntensityTOY。我没有TOY2而且我不熟悉您的具体数据,所以我不确定,但请检查您是否要更改

    IntensityTOY

  3. nms <- colnames(TOY2[,3:ncol(IntensityTOY)])
    1. 您有一些年份值`nms <- colnames(TOY2[,3:ncol(TOY2)])` 。这不能转换为数字,会导致问题。这是一个解决方案:

      #N/A#在as.numeric()

      之前执行此操作

      d1$Year <- gsub("#N/A","", d1$Year)

    2. 最后一件事。对于下标作业,数据中的TOY2$Year <- gsub("#N/A","", TOY2$Year)可能会出现问题。有几种方法可以解决这个问题。如果出现此错误消息,您可以选择将NA更改为0,省略NA,将其归档或排除(NA)。