用R中的零填充空行

时间:2019-03-22 07:47:29

标签: r dataframe

我正在使用R来准备data.frame,稍后将在混合效果回归中使用它。我是R的新手,我曾尝试搜索并找到解决问题的方法,但找不到我想要的。

我的data.frame有20071行,我想添加一个新列,但是长度为1767,我需要用零填充其余部分。 这是代码:

data$M1 <- c(data$M1,(data$Mw[(data$Mw > 6.5)]-6.5))

我收到此错误:

Error in `$<-.data.frame`(`*tmp*`, "M1", value = c(0.0999999999999996,  : 


replacement has 1767 rows, data has 20071

所以我知道我只需要添加空行长度的零即可,但是在搜索中找不到答案。

5 个答案:

答案 0 :(得分:2)

您正在做的是提取符合条件的数据(1767行),因此矢量要短于数据框中的行数。

您应该改用“ ifelse”。

data$M1 <- ifelse(data$Mw > 6.5,
                  data$Mw - 6.5,
                  0)

如果数字大于6.5,则从数字中减去6.5,否则返回零。

答案 1 :(得分:0)

这应该做您想要的:

data$M1[1768:20071] <- 0

或者,如果M1是另一个数据帧的单独矢量或列:

data$M1 <- c(M1, rep(0, 20071-1768))

答案 2 :(得分:0)

使用cbind.fill()库中的rowr,我们可以绑定不同大小的数据帧/向量,同时用所需的fill填充孔。

  > a=as.data.frame(matrix(0,4,2),stringsAsFactors = FALSE)
  > a
      V1 V2
    1  0  0
    2  0  0
    3  0  0
    4  0  0
    > b=c(1,2,3)

    > cbind.fill(a,b,fill=0)
      V1 V2 object
    1  0  0      1
    2  0  0      2
    3  0  0      3
    4  0  0      0

答案 3 :(得分:0)

另一种基本的R方法是先创建填充有零的列,然后再使用逻辑索引。

data$M1 <- 0
data$M1[data$Mw > 6.5] <- data$Mw[data$Mw > 6.5] - 6.5

这可能更快。

答案 4 :(得分:0)

您可以这样做:

data$M1 <- pmax(data$Mw - 6.5, 0)

这里的想法如下:您想要创建一个包含data$Mw - 6.5的向量,除非data$Mw < 6.5,在这种情况下,向量应为零。这意味着您在data$Mw - 6.5 < 0时将为零。因此,对于每个i,向量将包含data$Mw - 6.50的最大值。

这正是函数pmax()的作用:它将多个向量作为输入并返回元素最大值。通过示例最容易看出这一点:

pmax(c(1, 4), c(3, 2))
[1] 3 4

输出的第一个值对应于max(1, 3),第二个值对应于max(4, 2)

这比使用ifelse()快得多。