Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将行合并为一行,替换NA_R - Fatal编程技术网

R 将行合并为一行,替换NA

R 将行合并为一行,替换NA,r,R,我有以下数据框架:(这只是一个小样本) 我想将所有三行合并成一行,用每列中出现的数字替换NA(每列只有一个数字)。忽略前三列。我使用了以下代码: bdep[4,4:9] <- bdep[3,4:9] bdep[4,4:9]我做了一个简单的解决方案,用零替换NA:s,并在每列中添加所有行。这有用吗 #data bdep <- rbind(c(rep(NA,6),3.402293,3.606941,4.000461,3.666381,3.499614), c

我有以下数据框架:(这只是一个小样本)

我想将所有三行合并成一行,用每列中出现的数字替换NA(每列只有一个数字)。忽略前三列。我使用了以下代码:

bdep[4,4:9] <- bdep[3,4:9]

bdep[4,4:9]我做了一个简单的解决方案,用零替换NA:s,并在每列中添加所有行。这有用吗

#data
bdep <- rbind(c(rep(NA,6),3.402293,3.606941,4.000461,3.666381,3.499614),
              c(3.805082,4.013435,3.98,3.490139,3.433857,3.27813, rep(NA,5)),
             c(rep(NA,11)))

#solution
bdep2 <- ifelse(is.na(bdep), 0, bdep)
bdep3 <- apply(bdep2, 2, sum)
bdep3 #the row you want?
#数据

bdep我最终找到了一个解决方案,将我在其他帖子(特别是和)中找到的一些代码拼凑在一起。我认为这会被认为是混乱的编码,所以我欢迎其他解决方案。这应该更好地描述我在OP中试图做的事情,我试图概括太多。具体来说,我有17个变量,在14年内测量(即238列),在生成这些数据时发生了一些事情,其中变量的前6年在一行,接下来的8年在另一行,因此我不想重新运行模型,我只想将两行合并为一行。
下面是一些根据我的真实场景简化的示例数据

创建数据框:

df <- data.frame(
  VALUE = c(16, 16, 16),
  COUNT = c(2431, 2610, 35419),
  AREA = c(243100, 261000, 3541900),
  n_dd_2000 = c(NA, 3.805, NA),
  n_dd_2001 = c(3.402, NA, NA)
)
然后我删除了前两行我从中获得的值,剩下一行是完整的,没有NA:

df <- df[-(1:2),]

df您想要的输出是什么?你只是在寻找
bdep[-(1:3)]你能用简单的语言解释一下减号在“bdep[-(1:3)]中的作用吗?我希望输出是第2行“n_dd-2000”列到“n_dd-2005”列中的一行数字,然后是第1行“n_dd-2006”列中的数字,等等。如果您想省略前三列,只保留一行作为剩余的,您可以执行
as.data.frame(lappy(bdep[-(1:3)],na.omit))
。关于减号:它取消选择列。如果您有一个包含9列的
data.frame
df[-(1:3)]
相当于
df[,4:9]
。它的通用性更好,因为您只需要指定要排除的列,而不是要包括的列。
as.data.frame(lappy(bdep[-(1:3)],na.omit))
对我不起作用,因为在示例中,这些列下面有更多的行。如何重写它,使其仅适用于这三行,而不适用于整个数据帧?从理论上讲,这似乎是一个不错的解决方案,尽管我刚刚得到了这个错误,如果我更改变量类型,我想不会发生这个错误<代码>应用中的错误(bdep2,2,sum):dim(X)必须具有正长度
我刚创建的测试矩阵不会出现该错误。也许可以将所需的列子集并作为.matrix()运行以创建等效条件?我用测试数据编辑了我的答案。我使用的是数据框,而不是矩阵,这就是为什么你的解决方案不起作用。如果我在您的解决方案中粘贴以下代码作为数据帧进行尝试:
bdep
info <- data.frame(start=seq(4, by=1, length.out=2), len=rep(1,2))
info2 <- data.frame(start=seq(5, by=1, length.out=1), len=rep(1,2))
foo = sequence(info$len) + rep(info$start-1, info$len)
foo2 = sequence(info2$len) + rep(info2$start-1, info2$len)
for(n in 1:length(foo)){
  df[3,foo[n]] <- df[2,foo[n]]
}
for(n in 1:length(foo2)){
  df[3,foo2[n]] <- df[1,foo2[n]]
}
df <- df[-(1:2),]