Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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_Data Manipulation - Fatal编程技术网

R 在数据帧中移动数据

R 在数据帧中移动数据,r,dataframe,data-manipulation,R,Dataframe,Data Manipulation,我试图移动数据框中的数据。我想将所有不等于0的第一个值移动到高度1 示例数据如下所示 Tree <- c(1:10) height0 <- c(0,0,0,0,0,0,0,0,0,0) height1 <- c(1.5,2.0,0.0,1.2,1.3,0.9,0.0,0.0,1.8,0.0) height2 <- c(2.4,2.2,1.1,1.9,1.4,1.7,0.0,0.0,2.7,0.0) height3 <- c(3.1,2.9,2.1,2.6,2.2,2

我试图移动数据框中的数据。我想将所有不等于0的第一个值移动到高度1

示例数据如下所示

Tree <- c(1:10)
height0 <- c(0,0,0,0,0,0,0,0,0,0)
height1 <- c(1.5,2.0,0.0,1.2,1.3,0.9,0.0,0.0,1.8,0.0)
height2 <- c(2.4,2.2,1.1,1.9,1.4,1.7,0.0,0.0,2.7,0.0)
height3 <- c(3.1,2.9,2.1,2.6,2.2,2.4,0.0,0.6,3.6,0.0)
height4 <- c(3.8,3.4,2.9,3.0,2.9,3.1,0.0,1.1,4.1,0.0)
height5 <- c(4.2,3.7,3.6,3.7,3.5,3.8,0.7,1.9,4.6,0.0)
height6 <- c(4.4,4.1,4.1,4.2,4.0,4.5,1.6,2.6,4.9,1.2)
height7 <- c(4.7,4.4,4.3,4.6,4.2,4.9,2.2,3.0,5.1,2.0)


df <- data.frame(Tree, height0, height1, height2, height3, height4, height5, height6, height7)
df
   Tree height0 height1 height2 height3 height4 height5 height6 height7
1     1       0     1.5     2.4     3.1     3.8     4.2     4.4     4.7
2     2       0     2.0     2.2     2.9     3.4     3.7     4.1     4.4
3     3       0     0.0     1.1     2.1     2.9     3.6     4.1     4.3
4     4       0     1.2     1.9     2.6     3.0     3.7     4.2     4.6
5     5       0     1.3     1.4     2.2     2.9     3.5     4.0     4.2
6     6       0     0.9     1.7     2.4     3.1     3.8     4.5     4.9
7     7       0     0.0     0.0     0.0     0.0     0.7     1.6     2.2
8     8       0     0.0     0.0     0.6     1.1     1.9     2.6     3.0
9     9       0     1.8     2.7     3.6     4.1     4.6     4.9     5.1
10   10       0     0.0     0.0     0.0     0.0     0.0     1.2     2.0
我试图将所有的第一个高度值移动到高度1,因为不是所有的树都同时发芽,我只想比较生长速度,而不是因为发芽差异而得到错误的结果

所以我的数据应该是这样的

df
Tree height0 height1 height2 height3 height4 height5 height6 height7
1     1       0     1.5     2.4     3.1     3.8     4.2     4.4     4.7
2     2       0     2.0     2.2     2.9     3.4     3.7     4.1     4.4
3     3       0     1.1     2.1     2.9     3.6     4.1     4.3     
4     4       0     1.2     1.9     2.6     3.0     3.7     4.2     4.6
5     5       0     1.3     1.4     2.2     2.9     3.5     4.0     4.2
6     6       0     0.9     1.7     2.4     3.1     3.8     4.5     4.9
7     7       0     0.7     1.6     2.2     
8     8       0     0.6     1.1     1.9     2.6     3.0     
9     9       0     1.8     2.7     3.6     4.1     4.6     4.9     5.1
10   10       0     1.2     2.0 
有没有办法做到这一点

我有超过3000棵树,我测量了40次,手工操作需要很长时间


谢谢

一个选项是循环行(
apply
with
MARGIN=1
),提取非零元素,使用
length用
NA
填充其余的
NA
还是
?如果它是空的,它将改变classNA将是最好的,因为我想最终从这个绘制增长曲线
df[-(1:2)] <-  t(apply(df[-(1:2)], 1, function(x) `length<-`(x[x!=0], ncol(df)-2)))
df
#   Tree height0 height1 height2 height3 height4 height5 height6 height7
#1     1       0     1.5     2.4     3.1     3.8     4.2     4.4     4.7
#2     2       0     2.0     2.2     2.9     3.4     3.7     4.1     4.4
#3     3       0     1.1     2.1     2.9     3.6     4.1     4.3      NA
#4     4       0     1.2     1.9     2.6     3.0     3.7     4.2     4.6
#5     5       0     1.3     1.4     2.2     2.9     3.5     4.0     4.2
#6     6       0     0.9     1.7     2.4     3.1     3.8     4.5     4.9
#7     7       0     0.7     1.6     2.2      NA      NA      NA      NA
#8     8       0     0.6     1.1     1.9     2.6     3.0      NA      NA
#9     9       0     1.8     2.7     3.6     4.1     4.6     4.9     5.1
#10   10       0     1.2     2.0      NA      NA      NA      NA      NA