如何在R语言中筛选总和大于0的数值型列名?
在R语言中筛选数值型且列总和大于0的列名
问题背景
现有如下数据表格:
| Name | Grade | Test1 | Test2 | Test3 |
|---|---|---|---|---|
| Tim | A | 0.7 | 0.0 | 0.8 |
| Amy | B | 0.8 | 0.0 | 0.5 |
| John | B | 0.6 | 0.0 | 0.6 |
需要获取所有数值型且列总和大于0的列名,预期输出如下:
Test1 # 总和为2.1 Test3 # 总和为1.9 # Name和Grade因非数值型被忽略 # Test2因总和为0被忽略
实现方法
步骤1:构造数据框
先将示例数据转换为R可处理的数据框:
df <- data.frame( Name = c("Tim", "Amy", "John"), Grade = c("A", "B", "B"), Test1 = c(0.7, 0.8, 0.6), Test2 = rep(0.0, 3), Test3 = c(0.8, 0.5, 0.6) )
步骤2:筛选并输出目标列
通过以下代码完成筛选逻辑,并输出符合要求的结果及忽略说明:
# 提取所有数值型列 numeric_cols <- sapply(df, is.numeric) # 计算数值型列的总和 col_sums <- colSums(df[, numeric_cols]) # 筛选总和大于0的列 valid_cols <- names(col_sums[col_sums > 0]) # 输出有效列及其总和 for(col in valid_cols) { cat(sprintf("%s # 总和为%.1f\n", col, col_sums[col])) } cat("\n") # 输出被忽略的列说明 non_numeric_cols <- names(df)[!numeric_cols] cat(sprintf("# %s因非数值型被忽略\n", paste(non_numeric_cols, collapse = "和"))) zero_sum_cols <- names(col_sums[col_sums == 0]) cat(sprintf("# %s因总和为0被忽略\n", paste(zero_sum_cols, collapse = "和")))
运行代码后即可得到与预期一致的输出。
内容的提问来源于stack exchange,提问作者SelketDaly
相关产品推荐
相关产品推荐

