r - 对 R 中的列求和时的问题
问题描述
对于以下数据:
Step isWeekOfYearVisible setDecorationBackgroundVisible setAlwaysFireDayProperty setFont
1 0 1 0 4
2 0 1 0 4
3 0 1 0 4
4 0 1 0 4
5 0 1 0 4
6 0 1 0 4
7 0 1 0 4
8 0 1 0 4
我想使用列名对列的值求和。为此,我编写了以下 R 脚本:
ddd <- read.csv("/home/adam/Desktop/data.csv")
Method_name <- "isWeekOfYearVisible"
col <- ddd[[Method_name]]
print(sum(as.numeric(col)))
结果是 8,这是错误的,因为该列的值之和应为 0。
我怎样才能解决这个问题?
解决方案
正如@RonakShah 所说,这可能是因为您将字符串作为因素。
除了他的解决方案,您可以设置options(stringsAsFactors = FALSE)
,data.frames
不将字符串转换为因子。
另一种可能性是您可以使用tidyverse
,并使用 加载 csv read_csv
,并使用 处理数据tibble
,这是 data.frames 的现代实现。这个实现消除了一些奇怪的行为,比如这个,以及其他一些。
这是我刚才讲的一个例子:
# Your use case
df = data.frame(list( "a" = as.character(rep(0, 10)) ))
sum( as.numeric( df[["a"]] ) )
# [1] 10
# Converting your factors back to string, by getting the respective factor level
df = data.frame(list( "a" = as.character(rep(0, 10)) ))
sum( as.numeric( levels(df[["a"]]) ) )
# [1] 0
# The same thing just using tibble from tidyverse
library(tidyverse)
df = tibble(list( "a" = as.character(rep(0, 10)) ))
sum( as.numeric( df[["a"]] ) )
# [1] 0
# Setting the global setting for not to convert strings to factors
options(stringsAsFactors = F)
df = data.frame(list("a"=as.character(rep(0, 10)), "b"=as.character(rep(1, 10))))
sum( as.numeric( df[["a"]] ) )
# [1] 0
推荐阅读
- node.js - AnswerHandler 和 PlayerCountHandler 混淆了
- vector-tiles - 打开地图瓷砖。车辆路线
- javascript - 开始:意图在真实设备上显示空白屏幕,我没有收到任何 adb logcat 错误
- python - 每次结果都不一样
- javascript - paho js mqtt 客户端触发 onConnect 事件
- c - C 使用 dup2 管道子级和父级
- ruby-on-rails - Rails jsonb - 当 jsonb 保存到 Postgresql 数据库时,防止 JSON 键重新排序
- spring - Spring Data Solr - 多核支持
- c - 如何制作 argv[1] 的副本
- django - Django:在 get_context_data 中设置初始值无法按预期工作