从.csv文件加载数据,然后将其保存在R中的字典中

时间:2014-03-17 00:43:45

标签: r dictionary data-structures import-from-csv

我需要从.csv文件加载数据,然后将其保存在 R 的字典中。

需要从.csv文件加载数千行数据条目。

数据格式:

  country,region,value
     1  ,  north , 101
     1  ,  north , 219
     2  ,  south , 308
     2  ,  south , 862
   ... , ...     , ...

我的预期结果可以保存在 R

的数据结构中
    country , region, list of values
     1  north     101 , 219 
     2  south     308 , 862 

这样我就可以获得与同一国家和地区相关联的值。

每行可能有不同的国家和地区。

我需要将同一国家和地区的价值保存在一起。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

目前尚不清楚您对输入数据的确切意图,也不清楚所需的输出是什么。也许

tmp <- read.csv(text="country,region,value
     1  ,  north , 101
     1  ,  north , 219
     2  ,  south , 308
     2  ,  south , 862")

dups <- duplicated(tmp[1:2])
dat <- data.frame(tmp[!dups, 1:2], value = paste(tmp[!dups, 3], tmp[dups, 3], sep = " , "))
dat
##   country   region     value
## 1       1   north  101 , 219
## 3       2   south  308 , 862

答案 1 :(得分:0)

如果我是你,我会坚持让你的数据保持“长”状态。但如果您真的想以这种方式“聚合”数据,可以查看aggregate函数:

选项1:在列中存储为列表的值。很有趣,但后来还要处理。

aggregate(value ~ country + region, tmp, I, simplify=FALSE)
#   country   region    value
# 1       1   north  101, 219
# 2       2   south  308, 862
str(.Last.value)
# 'data.frame':  2 obs. of  3 variables:
#  $ country: num  1 2
#  $ region : Factor w/ 2 levels "  north ","  south ": 1 2
#  $ value  :List of 2
#   ..$ 1:Class 'AsIs'  int [1:2] 101 219
#   ..$ 3:Class 'AsIs'  int [1:2] 308 862

选项2:值存储为单个逗号分隔的字符向量列。以后不太可能处理,但可能需要进一步处理(再次拆分)才有用。

aggregate(value ~ country + region, tmp, paste, collapse = ",")
#   country   region   value
# 1       1   north  101,219
# 2       2   south  308,862
str(.Last.value)
# 'data.frame': 2 obs. of  3 variables:
#  $ country: num  1 2
#  $ region : Factor w/ 2 levels "  north ","  south ": 1 2
#  $ value  : chr  "101,219" "308,862"