删除零而不删除整行或整列 - R
Removing zeros without removing entire row or col - R
有没有办法让第一列从第一个正值开始?
假设我有这样的数据
我希望它看起来像这样:
显然我的数据要大得多,手动完成非常繁琐。我搜索过这个,但只能找到基于零删除行或列的方法。
您可以排除等于零的元素并按行调整 length
。
t(mapply(`length<-`, apply(m, 1, function(x) x[x != 0]), ncol(m)))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 7 9 4 NA
# [2,] 3 6 NA NA NA
# [3,] 1 6 6 4 3
# [4,] 7 NA NA NA NA
# [5,] 4 3 1 8 NA
如果你的数据是数据框,
d <- as.data.frame(m)
你可以这样做:
setNames(as.data.frame(t(mapply(`length<-`, apply(d, 1, function(x) x[x != 0]), ncol(d)))),
names(d))
# V1 V2 V3 V4 V5
# 1 1 7 9 4 NA
# 2 3 6 NA NA NA
# 3 1 6 6 4 3
# 4 7 NA NA NA NA
# 5 4 3 1 8 NA
数据
m <- matrix(c(0, 0, 1, 0, 0,
1, 0, 6, 0, 4,
7, 0, 6, 0, 3,
9, 3, 4, 0, 1,
4, 6, 3, 7, 8), 5)
有没有办法让第一列从第一个正值开始? 假设我有这样的数据
我希望它看起来像这样:
显然我的数据要大得多,手动完成非常繁琐。我搜索过这个,但只能找到基于零删除行或列的方法。
您可以排除等于零的元素并按行调整 length
。
t(mapply(`length<-`, apply(m, 1, function(x) x[x != 0]), ncol(m)))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 7 9 4 NA
# [2,] 3 6 NA NA NA
# [3,] 1 6 6 4 3
# [4,] 7 NA NA NA NA
# [5,] 4 3 1 8 NA
如果你的数据是数据框,
d <- as.data.frame(m)
你可以这样做:
setNames(as.data.frame(t(mapply(`length<-`, apply(d, 1, function(x) x[x != 0]), ncol(d)))),
names(d))
# V1 V2 V3 V4 V5
# 1 1 7 9 4 NA
# 2 3 6 NA NA NA
# 3 1 6 6 4 3
# 4 7 NA NA NA NA
# 5 4 3 1 8 NA
数据
m <- matrix(c(0, 0, 1, 0, 0,
1, 0, 6, 0, 4,
7, 0, 6, 0, 3,
9, 3, 4, 0, 1,
4, 6, 3, 7, 8), 5)