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

R 如何在一次运行中删除基于不同弧坑的行

R 如何在一次运行中删除基于不同弧坑的行,r,R,我有一个数据看起来像这样 df<- structure(list(V2 = c(15L, 20L, 0L, 0L, 0L, 40L, 0L, 1538100000L, 0L), V3 = c(142480000L, 20L, 0L, 0L, 100L, 0L, 0L, 1444000000L, 100L), V4 = c(170130000L, 0L, 0L, 1577400000L, 0L, 0L, 1577400000L, 1577400000L, 20L), V5 = c(17

我有一个数据看起来像这样

df<- structure(list(V2 = c(15L, 20L, 0L, 0L, 0L, 40L, 0L, 1538100000L, 
0L), V3 = c(142480000L, 20L, 0L, 0L, 100L, 0L, 0L, 1444000000L, 
100L), V4 = c(170130000L, 0L, 0L, 1577400000L, 0L, 0L, 1577400000L, 
1577400000L, 20L), V5 = c(176030000L, 0L, 0L, 176030000L, 0L, 
20431000L, 0L, 1449700000L, 0L)), .Names = c("V2", "V3", "V4", 
"V5"), class = "data.frame", row.names = c("A", "B", "C", "D", 
"F", "G", "H", "I", "J"))

#          V2         V3         V4         V5
#A         15  142480000  170130000  176030000
#B         20         20          0          0
#C          0          0          0          0
#D          0          0 1577400000  176030000
#F          0        100          0          0
#G         40          0          0   20431000
#H          0          0 1577400000          0
#I 1538100000 1444000000 1577400000 1449700000
#J          0        100         20          0
df[rowSums(df)>0, ]
#          V2         V3         V4         V5
#A         15  142480000  170130000  176030000
#B         20         20          0          0
#D          0          0 1577400000  176030000
#I 1538100000 1444000000 1577400000 1449700000
现在我想删除那些只有一个值,其余为零的行 然后我想删除一半值为零的列(右或左)

预期输出应该如下所示

df<- structure(list(V2 = c(15L, 20L, 0L, 0L, 0L, 40L, 0L, 1538100000L, 
0L), V3 = c(142480000L, 20L, 0L, 0L, 100L, 0L, 0L, 1444000000L, 
100L), V4 = c(170130000L, 0L, 0L, 1577400000L, 0L, 0L, 1577400000L, 
1577400000L, 20L), V5 = c(176030000L, 0L, 0L, 176030000L, 0L, 
20431000L, 0L, 1449700000L, 0L)), .Names = c("V2", "V3", "V4", 
"V5"), class = "data.frame", row.names = c("A", "B", "C", "D", 
"F", "G", "H", "I", "J"))

#          V2         V3         V4         V5
#A         15  142480000  170130000  176030000
#B         20         20          0          0
#C          0          0          0          0
#D          0          0 1577400000  176030000
#F          0        100          0          0
#G         40          0          0   20431000
#H          0          0 1577400000          0
#I 1538100000 1444000000 1577400000 1449700000
#J          0        100         20          0
df[rowSums(df)>0, ]
#          V2         V3         V4         V5
#A         15  142480000  170130000  176030000
#B         20         20          0          0
#D          0          0 1577400000  176030000
#I 1538100000 1444000000 1577400000 1449700000
已删除名为C的行,因为所有成员均为零

F被删除,因为其中只有一个值,其余为零

G被删除是因为(假设我们有4列,我们应该有 2的值前2个或后2个)和G有两个值 但这并不接近

H被删除,因为它只有一个值

J被删除,因为在两个开始时也没有两个值 列或最后两列

第一次尝试

  df[rowSums(df) > 0 & rowSums(df==0) != ncol(df)-1 & df[,1] != 0 & df[,2] !=0 | df[,3] !=0 & df[,4] !=0,]
  #           V2         V3         V4         V5
  # A         15  142480000  170130000  176030000
  # B         20         20          0          0
  # D          0          0 1577400000  176030000
  # I 1538100000 1444000000 1577400000 1449700000
二,。要了解已删除行的索引值,请在
which()
函数中设置相反的条件

   which(rowSums(df) <= 0)
   # C 
   # 3 

   which(rowSums(df==0) == ncol(df)-1)
   # F H 
   # 5 7 
which(行和(df)I.第一次尝试

  df[rowSums(df) > 0 & rowSums(df==0) != ncol(df)-1 & df[,1] != 0 & df[,2] !=0 | df[,3] !=0 & df[,4] !=0,]
  #           V2         V3         V4         V5
  # A         15  142480000  170130000  176030000
  # B         20         20          0          0
  # D          0          0 1577400000  176030000
  # I 1538100000 1444000000 1577400000 1449700000
二、 要了解已删除行的索引值,请在
which()
函数中设置相反的条件

   which(rowSums(df) <= 0)
   # C 
   # 3 

   which(rowSums(df==0) == ncol(df)-1)
   # F H 
   # 5 7 

which(行和(df)使用临时变量

## logical array indicating non-zero elements
nz <- array(df != 0, c(dim(df) / c(1, 2), 2))

rowSums(nz) > 1                         # conditions 1 & 2
#[1]  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE

## rows with no zeros in the left half
apply(nz[, , 1], 1, all)
#[1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE

## rows with no zeros in the right half
apply(nz[, , 2], 1, all)
#[1]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE

## rows with no zeros in either the left or the right half
rowSums(apply(nz, c(1, 3), all)) > 0    # condition 3
#[1]  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE
表示非零元素的逻辑数组 新西兰1#条件1和2 #[1] 真假假假真假假真 ##左半部分没有零的行 适用(新西兰[,1],1,全部) #[1] 真假假假假假假真假 ##右半部分没有零的行 适用(新西兰[,2],1,全部) #[1] 真假假假假假假真假假 ##左半部分或右半部分都没有零的行 行和(适用(nz,c(1,3),全部))>0#条件3 #[1] 真假真假假假真假假假
我认为前两个条件是多余的

## rows that satisfy all conditions simultaneously
ind <- rowSums(nz) > 1 & rowSums(apply(nz, c(1, 3), all)) > 0

which(ind)
#[1] 1 2 4 8

df[ind, ]
#          V2         V3         V4         V5
#A         15  142480000  170130000  176030000
#B         20         20          0          0
#D          0          0 1577400000  176030000
#I 1538100000 1444000000 1577400000 1449700000
同时满足所有条件的行 索引1和行和(适用于(新西兰,c(1,3),全部))>0 哪个(ind) #[1] 1 2 4 8 df[ind,] #V2 V3 V4 V5 #A 15 142480000 170130000 176030000 #B20200 #D 0 15774000176030000 #I 1538100000 1444000000 15774000000 1449700000
使用临时变量

## logical array indicating non-zero elements
nz <- array(df != 0, c(dim(df) / c(1, 2), 2))

rowSums(nz) > 1                         # conditions 1 & 2
#[1]  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE

## rows with no zeros in the left half
apply(nz[, , 1], 1, all)
#[1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE

## rows with no zeros in the right half
apply(nz[, , 2], 1, all)
#[1]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE

## rows with no zeros in either the left or the right half
rowSums(apply(nz, c(1, 3), all)) > 0    # condition 3
#[1]  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE
表示非零元素的逻辑数组 新西兰1#条件1和2 #[1] 真假假假真假假真 ##左半部分没有零的行 适用(新西兰[,1],1,全部) #[1] 真假假假假假假真假 ##右半部分没有零的行 适用(新西兰[,2],1,全部) #[1] 真假假假假假假真假假 ##左半部分或右半部分都没有零的行 行和(适用(nz,c(1,3),全部))>0#条件3 #[1] 真假真假假假真假假假 我认为前两个条件是多余的

## rows that satisfy all conditions simultaneously
ind <- rowSums(nz) > 1 & rowSums(apply(nz, c(1, 3), all)) > 0

which(ind)
#[1] 1 2 4 8

df[ind, ]
#          V2         V3         V4         V5
#A         15  142480000  170130000  176030000
#B         20         20          0          0
#D          0          0 1577400000  176030000
#I 1538100000 1444000000 1577400000 1449700000
同时满足所有条件的行 索引1和行和(适用于(新西兰,c(1,3),全部))>0 哪个(ind) #[1] 1 2 4 8 df[ind,] #V2 V3 V4 V5 #A 15 142480000 170130000 176030000 #B20200 #D 0 15774000176030000 #I 1538100000 1444000000 15774000000 1449700000
注意:这不是最后一个条件的通用公式,即删除左半部或右半部没有连续非零值的行。它特定于这一个。前两个条件是通用的。你能让它变得不那么复杂吗?即使不是在一次运行中,也可以!我如何找到删除的行(我的意思是它们的索引)。请用扩展的方式更新您的答案,保留您所写的内容,以便我可以查看it@nik:请编辑问题的第三部分,即左半部分和右半部分,您提到需要删除列而不是行,并且左半部分和右半部分的连续值应为零。如何输入输出如果非零值在左半部分或左半部分是连续的,请检查它们。我喜欢你的答案,但我认为问题不应该是更改语句
,然后我想删除一半值为零的列(右或左)
如果您在输出中看到左或右都有r行带半个零&ur其他语句
G被删除,因为(假设我们有4列,那么前2列或后2列中应该有2的值)和G有两个值,但不接近
J被删除,因为在两个第一列或两个最后列上都没有两个值
。RU检查
非零
列的前半部分的值?注:这不是最后一个条件的通用公式,即删除没有con的行左半或右半的连续非零值。这是特定于此的。前两个条件是通用的。你能让它不那么复杂吗?即使它不是一次运行,也没关系!还有,我如何找到哪些行被删除(我的意思是它们的索引)。请用扩展的方式更新您的答案,保留您所写的内容,以便我可以查看it@nik:请编辑问题的第三部分,即左半部分和右半部分,您提到需要删除列而不是行,并且左半部分和右半部分的连续值应为零。如何输入输出如果非零值在左半部分或左半部分是连续的,请检查它们。我喜欢你的答案,但我认为问题不应该是更改语句
,然后我想删除一半值为零的列(右或左)
如果您在输出中看到左或右都有r行带半个零&ur其他语句
G被删除,因为(假设我们有4列,那么前2列或后2列中应该有2的值)G有两个值,但不接近
&
J被删除,因为在两个第一列或两个最后列没有两个值