【发布时间】:2015-02-27 16:31:19
【问题描述】:
我有一个大致如下结构的数据集:
case Year 2001 2002 2003 2004
1 2003 0 0 0 3
2 2002 0 5 3 2
3 2001 3 3 2 2
我正在尝试对其进行重组,以便每一列代表从“年份”变量计数的第一年、第二年(等等),即:
case Year yr1 yr2 yr3 yr4
1 2003 0 3 0 0
2 2002 5 3 2 0
3 2001 3 3 2 2
此代码下载数据集并尝试@akrun 建议的解决方案,但失败了。
library("devtools")
df1 <- source_gist("b4c44aa67bfbcd6b72b9")
df1[-(1:2)] <- do.call(rbind,lapply(seq_len(nrow(df1)), function(i) {x <- df1[i, ]; x1 <- unlist(x[-(1:2)]); indx <- which(!is.na(x1))[1]; i <- as.numeric(names(indx))-x[,2]+1; x2 <- x1[!is.na(x1)]; x3 <- rep(NA, length(x1)); x3[i:(i+length(x2)-1)]<- x2; x3}))
这会生成:
Error in i:(i + length(x2) - 1) : NA/NaN argument
In addition: Warning message:
In FUN(1:234[[1L]], ...) : NAs introduced by coercion
如何转换数据,以便每一列代表第一年、第二年(等等),从每行的“年份”变量中的值开始计算?
【问题讨论】:
-
我只是在看预期的输出。抱歉,我可能错过了那个关键属性。
-
对于第一行,
3重新排列为yr2。我这里没有连接。 -
因为“年份”变量中指定的 yr1=2003
-
@akrun - 你在写一个新的解决方案吗?您具有一定价值的解决方案 - 通过手动编辑数据集它可以工作......
-
看了你的预期和输入数据后,我仍然没有得到连接
标签: r data-manipulation