r语言列表里删除除了某一一个变量其余全是0的变量,
时间: 2024-04-29 16:21:35 浏览: 168
假设你有一个列表 `my_list`,其中包含了多个数据框(data frame),每个数据框中都有多个变量(column),你想要删除除了指定变量以外,其余全为0的变量,可以按照以下步骤进行:
1. 对于每个数据框,使用 `sapply` 函数计算每个变量的和,并将其存储在一个向量中,例如:
```
sums <- sapply(my_list[[1]], sum)
```
这里假设我们只考虑第一个数据框。
2. 使用布尔索引(Boolean indexing)选出需要保留的变量和需要删除的变量。例如,如果你希望保留名为 `var1` 的变量,并删除所有其余全为0的变量,可以这样做:
```
to_keep <- c("var1")
to_remove <- names(sums[sums == 0 & !(names(sums) %in% to_keep)])
```
这里使用了两个条件:第一个条件 `sums == 0` 表示变量的和等于0,第二个条件 `!(names(sums) %in% to_keep)` 表示变量不在需要保留的列表中。这两个条件使用 `&` 连接,表示需要同时满足这两个条件。
3. 对于每个数据框,使用 `subset` 函数选出需要保留的变量,例如:
```
my_list[[1]] <- subset(my_list[[1]], select=c(to_keep, to_remove))
```
这里假设我们只考虑第一个数据框,`to_keep` 和 `to_remove` 是上一步计算得到的需要保留和需要删除的变量名列表。
4. 重复步骤 1 到 3,对于每个数据框都进行相同的操作。
完整代码示例:
```
# 生成示例数据
df1 <- data.frame(var1=c(1,2,3), var2=c(0,0,0), var3=c(0,0,0))
df2 <- data.frame(var1=c(0,0,0), var2=c(4,5,6), var3=c(0,0,0))
df3 <- data.frame(var1=c(0,0,0), var2=c(0,0,0), var3=c(7,8,9))
my_list <- list(df1, df2, df3)
# 对于每个数据框,删除除了 var1 以外其余全为0的变量
for (i in seq_along(my_list)) {
sums <- sapply(my_list[[i]], sum)
to_keep <- c("var1")
to_remove <- names(sums[sums == 0 & !(names(sums) %in% to_keep)])
my_list[[i]] <- subset(my_list[[i]], select=c(to_keep, to_remove))
}
```
阅读全文