簡體   English   中英

如何有條件地刪除 r 中的列?

[英]How to conditionally remove columns in r?

我想為每一行刪除具有“o”值的列。
例如:在第 3 行中,刪除第一列和第三列,並保留第二列的名稱不變。

> stocks_grid2
  Var1 Var2 Var3
1    o    o    o
2 Var1    o    o
3    o Var2    o
4 Var1 Var2    o
5    o    o Var3
6 Var1    o Var3
7    o Var2 Var3
8 Var1 Var2 Var3

可復制的數據

n_s <- 3
l_s <- rep(list(0:1), n_s)
stocks_grid2 <- expand.grid(l_s)

stocks_grid2[-1] <- lapply(seq_along(stocks_grid2)[-1], function(x) ifelse(stocks_grid2[[x]] == 1, names(stocks_grid2)[x], stocks_grid2[[x]]))
stocks_grid2[1] <- lapply(seq_along(stocks_grid2)[1], function(x) ifelse(stocks_grid2[[x]] == 1, names(stocks_grid2)[x], stocks_grid2[[x]]))

stocks_grid2[-1] <- lapply(seq_along(stocks_grid2)[-1], function(x) ifelse(stocks_grid2[[x]] == 0, "o", stocks_grid2[[x]]))
stocks_grid2[1] <- lapply(seq_along(stocks_grid2)[1], function(x) ifelse(stocks_grid2[[x]] == 0, "o", stocks_grid2[[x]]))

output 看起來像

  Var2
3 Var2

對於每一行

該問題的總體目標尚不清楚,但假設您在循環中應用一些代碼,您可以嘗試 -

for(i in seq(nrow(stocks_grid2))) {
  row <- stocks_grid2[i, ]
  result <- row[row != 'o']
  #Use `result` for further processing if needed.
  print(result)
}

#character(0)
#[1] "Var1"
#[1] "Var2"
#[1] "Var1" "Var2"
#[1] "Var3"
#[1] "Var1" "Var3"
#[1] "Var2" "Var3"
#[1] "Var1" "Var2" "Var3"

我不確定,但這是你想要的嗎?

apply(df, 1, function(x) {
  x[x!= "o"]
  
})

結果:

[[1]]
named character(0)

[[2]]
  Var1 
"Var1" 

[[3]]
  Var2 
"Var2" 

[[4]]
  Var1   Var2 
"Var1" "Var2" 

[[5]]
  Var3 
"Var3" 

[[6]]
  Var1   Var3 
"Var1" "Var3" 

[[7]]
  Var2   Var3 
"Var2" "Var3" 

[[8]]
  Var1   Var2   Var3 
"Var1" "Var2" "Var3"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM