You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

识别data.table中仅含正值与混合值的列

识别data.table中仅含正值与混合值的列

给定如下data.table数据:

temp_dt = structure(list(A = c(-1.4151, -1.2535, -0.7097, -0.4184, 0.0579, 
0.2964, 0.7352, 0.8097, 0.7089, 0.4088), B = c(56.2776, 48.3075, 
56.9811, 53.5512, 58.1714, 54.9303, 59.553, 53.5128, 50.3509, 
46.1777), C = c(78.3689, 47.99, 88.1506, 71.2523, 94.6338, 81.2598, 
90.4598, 67.8621, 54.8966, 35.9972), D = c(-11.3246, -9.9593, 
-5.6762, -3.3858, 0.1303, 1.8899, 4.9471, 5.4475, 4.7887, 2.8341
), E = c(-0.0974, -0.1852, -0.0652, -0.0917, -0.0695, -0.0548, 
-0.0286, -0.0419, -0.0796, -0.0875)), row.names = c(NA, -10L), class = c("data.table", 
"data.frame"))

数据预览:

> temp_dt 
         A       B       C        D       E
 1: -1.4151 56.2776 78.3689 -11.3246 -0.0974
 2: -1.2535 48.3075 47.9900  -9.9593 -0.1852
 3: -0.7097 56.9811 88.1506  -5.6762 -0.0652
 4: -0.4184 53.5512 71.2523  -3.3858 -0.0917
 5:  0.0579 58.1714 94.6338   0.1303 -0.0695
 6:  0.2964 54.9303 81.2598   1.8899 -0.0548
 7:  0.7352 59.5530 90.4598   4.9471 -0.0286
 8:  0.8097 53.5128 67.8621   5.4475 -0.0419
 9:  0.7089 50.3509 54.8966   4.7887 -0.0796
10:  0.4088 46.1777 35.9972   2.8341 -0.0875

需求:识别数据表中仅含正值的列,以及同时包含正值和负值的混合值列。


解决方案

1. Base R 方法

通过colSums()结合逻辑判断,统计每列的负值数量,以此区分列类型:

# 提取仅含正值的列名
positive_cols = names(temp_dt)[colSums(temp_dt < 0) == 0]
# 提取混合值列名(同时存在正负值)
mixed_cols = names(temp_dt)[colSums(temp_dt < 0) > 0 & colSums(temp_dt > 0) > 0]

# 输出结果
cat("仅含正值的列:", paste(positive_cols, collapse = ", "), "\n")
cat("混合值列:", paste(mixed_cols, collapse = ", "), "\n")

运行输出:

仅含正值的列: B, C 
混合值列: A, D, E 

2. data.table 方法

利用data.table的.SD遍历列,结合自定义函数判断列属性:

library(data.table)

# 生成列属性判断结果
col_attrs = temp_dt[, lapply(.SD, function(x) {
  has_neg = any(x < 0)
  has_pos = any(x > 0)
  ifelse(has_neg & has_pos, "混合值", "仅含正值")
})]

# 转换为易读的表格格式
col_attrs = melt(as.data.table(col_attrs), 
                 measure.vars = names(col_attrs),
                 variable.name = "列名",
                 value.name = "类型")

print(col_attrs)

运行输出:

列名    类型
1:   A 混合值
2:   B 仅含正值
3:   C 仅含正值
4:   D 混合值
5:   E 混合值

内容的提问来源于stack exchange,提问作者Saurabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:57:26