如何用R中的csv数据列创建帧数据结构?

时间:2010-10-17 10:08:25

标签: r import numeric dataframe factors

以下是R中导入数据的前五行:

数据[1:5,]

    user event_date day_of_week
1 00002781A2ADA816CDB0D138146BD63323CCDAB2 2010-09-04    Saturday
2 00002D2354C7080C0868CB0E18C46157CA9F0FD4 2010-09-04    Saturday
3 00002D2354C7080C0868CB0E18C46157CA9F0FD4 2010-09-07     Tuesday
4 00002D2354C7080C0868CB0E18C46157CA9F0FD4 2010-09-08   Wednesday
5 00002D2354C7080C0868CB0E18C46157CA9F0FD4 2010-09-17      Friday
  distinct_events_a_count total_events_a_count
1                             2                          2
2                             2                          2
3                             1                          3
4                             1                          1
5                             1                          1
  events_a_duration distinct_events_b_count total_events_b_count
1                     615                       1                    1
2                      77                       1                    1
3                     201                       1                    1
4                      44                       1                    1
5                       3                       1                    1
  events_b_duration
1                      47
2                      43
3                     117
4                      74
5                      18

问题是第6列和第9列被读作因子而不是数字,因此我无法执行数学运算。为了将导入的数据转换为适当的格式,我尝试按以下方式创建结构数据集:

dataset<-data.frame(events_a_duration=as.numeric(c(data[,6])), events_b_duration=as.numeric(c(data[,9])))

但检查值我发现帧结构不包含适当的值:

 dataset[1,]


events_a_duration events_b_duration
1                   10217                    6184

值应为615和47。

所以我不知道如何创建由导入数据列组成的帧数据结构,如果有人能够展示创建适当数据结构的方法,那将非常感激。

2 个答案:

答案 0 :(得分:4)

您的问题是您使用类的数量而不是相应的值将因子转换为整数。您可以检查类是否按值的升序编号:

> as.numeric(factor(c(615,47,42)))
[1] 3 2 1
> as.numeric(factor(c(615,42,47)))
[1] 3 1 2
> as.numeric(factor(c(615,42,47,37)))
[1] 4 2 3 1
> as.numeric(factor(c(615,42,37,47)))
[1] 4 2 1 3

使用as.numeric(as.character(MyFactor))。例如,见下文:

> as.numeric(as.character(factor(c(615,42,37,47))))
[1] 615  42  37  47

答案 1 :(得分:1)

data <- read.csv ("data.csv", stringsAsFactors=FALSE)