R导入制表符分隔TXT文件后使用colSums求和报错问题咨询
报错根因
- 调用
colSums("Wages and salaries")时报错:colSums()要求入参为至少二维的数组、数据框或矩阵,你传入的是纯字符串,属于一维字符向量,不符合参数要求,因此触发维度校验错误。 - 调用
colSums(V2)时报错:V2是你导入的filename数据框的内部列名,不属于全局环境的独立变量,直接调用V2时R无法找到对应对象;且即使能找到V2,单列属于一维向量,传给colSums()依然会触发维度不足的错误。
解决方法
计算单列总和
直接使用sum()函数即可,无需调用colSums(),有两种常用写法:
- 用
$提取数据框列,示例:# 计算默认列名V2的总和,na.rm=TRUE用于跳过空值避免返回NA,无空值可删除该参数 sum(filename$V2, na.rm = TRUE) - 若你的原始TXT第一行是表头,建议先修改导入代码,将
header参数设为TRUE直接读取列名,再计算指定列总和:# 重新导入带表头的文件 filename <- read.delim("~/filename.txt", header = TRUE) # 带空格的列名需要用反引号包裹 sum(filename$`Wages and salaries`, na.rm = TRUE)
多列分别求和
需要将目标列从数据框中提取后传给colSums()即可:
- 指定多列求和示例:
# 计算V2、V3、V4三列的各自总和 colSums(filename[, c("V2", "V3", "V4")], na.rm = TRUE) # 用自定义列名计算的写法 colSums(filename[, c("Wages and salaries", "Bonus", "Allowance")], na.rm = TRUE) - 计算所有数值列的总和:
# 先筛选所有数值类型的列,再统一求和,避免字符列参与计算报错 colSums(filename[sapply(filename, is.numeric)], na.rm = TRUE)
内容的提问来源于stack exchange,提问作者banchuk
相关产品推荐
相关产品推荐

