我的数据具有以下形式:
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
非常感谢任何提示/想法! :)
答案 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] }
关注
好的,所以后续代码中会出现一些问题。
班级并没有真正改变。请注释掉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)
我认为您曾使用TOY2$Year <- as.numeric(TOY2$Year)
来使用IntensityTOY
。我没有TOY2
而且我不熟悉您的具体数据,所以我不确定,但请检查您是否要更改
IntensityTOY
到
nms <- colnames(TOY2[,3:ncol(IntensityTOY)])
您有一些年份值`nms <- colnames(TOY2[,3:ncol(TOY2)])`
。这不能转换为数字,会导致问题。这是一个解决方案:
#N/A
#在as.numeric()
d1$Year <- gsub("#N/A","", d1$Year)
最后一件事。对于下标作业,数据中的TOY2$Year <- gsub("#N/A","", TOY2$Year)
可能会出现问题。有几种方法可以解决这个问题。如果出现此错误消息,您可以选择将NA
更改为0,省略NA,将其归档或排除(NA
)。