首页 > 解决方案 > 对 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。

我怎样才能解决这个问题?

标签: r

解决方案


正如@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

推荐阅读