R-汇总来自CSV的数据,每天无法汇总价值

时间:2018-06-22 16:33:39

标签: r

我正在尝试按天汇总收入数据。该列同时包含资产净值和实际收入数据。收入目前是一个“字符”。面临的挑战是您不能对“字符”求和,并且不能尝试更改班级休息时间。

通过as.numeric更改类会产生此错误:“ NAs由强制引入”

as.numeric(as.character())会完全擦除该列中的数据并返回所有NA。

日期列采用日期格式。这是我要执行的汇总。

df_agg<-aggregate(df$revenue,by=list(df$Date),sum,na.rm=TRUE)

当然,执行上述代码会导致:“ Summary.factor(c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,:   “总和”对因素没有意义”

最初是通过CSV读取数据的。我尝试阅读有/没有stringsAsFactors=FALSE

的内容
Example code
Code    Date    Visits  Revenue
1A  1/1/2018    3   5
2A  1/1/2018    5   NA
3A  1/2/2018    8   7
4A  1/3/2018    6   2
5A  1/3/2018    8   5

2 个答案:

答案 0 :(得分:1)

我怀疑问题的根源是如何将数据读入R。有多种原因导致对read函数的特定调用最终会给您character列数字。对于read.tableread.csv,如果收入列中的300000条目中没有任何内容被scan()解释为实数,则该列将不会转换为数字。这可能是拼写错误,除了NA以外,还可以表示缺失值。如果强制read函数通过包含一个colClasses参数来尝试将您的列转换为数字,则会得到一条提示性错误消息。这是一个示例:

df <- read.table(text = "Code    Date    Visits  Revenue
1A  1/1/2018    3   5
                 2A  1/1/2018    5   NA
                 3A  1/2/2018    8   7
                 4A  1/3/2018    6   2
                 5A  1/3/2018    8   5
                 6A  1/3/2018    7   2w", header = TRUE,
                 colClasses = c("character", "Date", "numeric", "numeric"), 
                 stringsAsFactors = FALSE)

这会产生错误消息:

  

`扫描错误(file = file,what = what,sep = sep,quote = quote,dec = dec,:     scan()预期为“真实”,得到“ 2w”``

在这里,您确切地知道问题所在。由于手指输入错误,它无法将列转换为数字。在源文件中对其进行更改,或者将其添加为以na.string传递的字符向量。

df <- read.table(text = "Code    Date    Visits  Revenue
1A  1/1/2018    3   5
                 2A  1/1/2018    5   NA
                 3A  1/2/2018    8   7
                 4A  1/3/2018    6   2
                 5A  1/3/2018    8   5
                 6A  1/3/2018    7   2w", header = TRUE,
                 colClasses = c("character", "Date", "numeric", "numeric"), 
                 stringsAsFactors = FALSE,
                 na.string = c("NA", "2w"))
df
#   Code       Date Visits Revenue
# 1   1A 0001-01-20      3       5
# 2   2A 0001-01-20      5      NA
# 3   3A 0001-02-20      8       7
# 4   4A 0001-03-20      6       2
# 5   5A 0001-03-20      8       5
# 6   6A 0001-03-20      7      NA

尤其是当我有一个非常大的文件要读入时,我总是传递一个colClasses参数。它不仅可以帮助您诊断和解决此类问题,还可以大大加快文件读取速度。

答案 1 :(得分:0)

这可能与您将数据读入R的方式有关,但是(在修正了另一个拼写错误Revenue != revenue之后),您的代码对我有用。

df = read.table(text="Code    Date    Visits  Revenue
1A  1/1/2018    3   5
2A  1/1/2018    5   NA
3A  1/2/2018    8   7
4A  1/3/2018    6   2
5A  1/3/2018    8   5", 
header=TRUE)

df_agg <- aggregate(df$Revenue,by=list(df$Date),sum,na.rm=TRUE)
   Group.1 x
1 1/1/2018 5
2 1/2/2018 7
3 1/3/2018 7