Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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中的零填充空行_R_Dataframe - Fatal编程技术网

用R中的零填充空行

用R中的零填充空行,r,dataframe,R,Dataframe,我正在使用R来准备一个data.frame,它将在以后的混合效应回归中使用。我对R很陌生,我试着搜索并找到问题的解决方案,但我找不到我想要的 我的data.frame有20071行,我想添加一个新列,但它的长度为1767,我需要用零填充其余的行。 代码如下: data$M1 <- c(data$M1,(data$Mw[(data$Mw > 6.5)]-6.5)) data$M1 6.5]-6.5) 我得到一个错误: Error in `$<-.data.frame`(`*t

我正在使用R来准备一个
data.frame
,它将在以后的混合效应回归中使用。我对R很陌生,我试着搜索并找到问题的解决方案,但我找不到我想要的

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

data$M1 <- c(data$M1,(data$Mw[(data$Mw > 6.5)]-6.5))
data$M1 6.5]-6.5)
我得到一个错误:

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


replacement has 1767 rows, data has 20071

“$中的
错误这应该是您想要的:

data$M1[1768:20071] <- 0

data$M1[1768:20071]这应该满足您的要求:

data$M1[1768:20071] <- 0
data$M1[1768:20071]使用
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
使用
rowr
库中的
cbind.fill()
,我们可以绑定不同大小的数据帧/向量,同时使用所需的
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

您所做的是提取符合您的条件的数据(1767行),因此向量比您在数据帧中的行数短

你应该用“ifelse”来代替

数据$M1 6.5,
数据$Mw-6.5,
0)

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

您所做的是提取符合您的条件的数据(1767行),因此向量比您在数据帧中的行数短

你应该用“ifelse”来代替

数据$M1 6.5,
数据$Mw-6.5,
0)

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

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

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

这可能更快。

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

data$M1 <- 0
data$M1[data$Mw > 6.5] <- data$Mw[data$Mw > 6.5] - 6.5
data$M1 6.5]6.5]-6.5
这可能更快。

您可以这样做:

data$M1 <- pmax(data$Mw - 6.5, 0)
输出的第一个值对应于
max(1,3)
第二个值对应于
max(4,2)

这比使用
ifelse()
要快得多。您可以执行以下操作:

data$M1 <- pmax(data$Mw - 6.5, 0)
输出的第一个值对应于
max(1,3)
第二个值对应于
max(4,2)


这比使用
ifelse()要快得多

是否只在末尾附加这些零?您能否添加一个具有预期输出的可复制示例?是否只在末尾附加这些零?您能添加一个具有预期输出的可复制示例吗?这个答案有一个问题,OP应该事先知道值
1768
。请学习如何格式化代码。我是为你做的,因为你是一个新用户,但这并不难。请参见答案框顶部的。要格式化代码,请参见此答案有问题,OP应事先知道值
1768
。请学习如何格式化代码。我是为你做的,因为你是一个新用户,但这并不难。请参见答案框顶部的。要设置代码格式,请参见