如何有条件地删除列在r?



我想删除每行中包含" 0 "价值。
例如:在第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
<<p>reproductible数据/strong>
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]]))

输出看起来像

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"

最新更新