从R中的外部CSV文件获取数据

时间:2018-09-04 09:46:38

标签: r dplyr data.table lapply

此帖子与此我的帖子相似 matching dataset with data in csv file in R,但这里是此外部csv文件的另一个外部源和结构,以及三个组,因此存在问题。

我有一个只有一列的csv文件

,"x"
1,"11202 3322 2018"
2,"11271 3322 2018"
3,"11353 2261 2018"
4,"11353 3322 2018"
5,"11353 3380 2018"
6,"11418 2247 2018"
7,"11418 2261 2018"
8,"11418 2316 2018"
9,"11418 3322 2018"
10,"11418 3740 2018"
11,"11511 979 2018"
12,"11514 196 2017"
13,"11514 377 2017"

3个组用空格表示。 是卑鄙的

group1,group2,group3
11202,  3322,  2018 

此格式来自外部来源,我无法更改。

有我的数据。

dataset=structure(list(group1 = c(11202L, 11271L, 11353L, 11353L, 11353L, 
11418L, 11418L, 11418L, 11418L, 11222L, 11223L, 11224L, 11225L, 
11226L, 11227L, 11228L), group2 = c(3322L, 3322L, 2261L, 3322L, 
3380L, 2247L, 2261L, 2316L, 3322L, 222L, 222L, 222L, 222L, 222L, 
222L, 222L), group3 = c(2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 
2018L, 2018L, 2018L, 111L, 111L, 111L, 111L, 111L, 111L, 111L
), x1 = 1:16), .Names = c("group1", "group2", "group3", "x1"), class = "data.frame", row.names = c(NA, 
-16L))

所以这些组在外部的csv文件中

group1  group2  group3  x1
11202   3322    2018    1
11271   3322    2018    2
11353   2261    2018    3
11353   3322    2018    4
11353   3380    2018    5
11418   2247    2018    6
11418   2261    2018    7
11418   2316    2018    8
11418   3322    2018    9

我不使用它。 我必须和新小组一起工作。 因此输出数据集

group1  group2  group3  x1
11222   222      111    10
11223   222      111    11
11224   222      111    12
11225   222     111     13
11226   222      111    14
11227   222      111    15
11228   222      111    16

如何进行这种匹配。这里有三个关键列。

编辑

dim(数据集) [1] 16 4

1 个答案:

答案 0 :(得分:2)

我假设您有两列,也假设第一列只是一个序列(正如您在我的假设中回答的那样,我认为我的假设正确),如果您只有一个列,请执行与我提到的相同的操作下面使用“,”作为模式,然后丢弃结果数据帧的第一列

data<-data.frame(col=c("1 2 3","5 6 7"))

   col
  1 2 3
  5 6 7
 out<-do.call('rbind',(str_split(data$col,pattern = " ")))
 colnames(out)<-c('group1','group2','group3')

 print(out)
 group1 group2 group3
 "1"    "2"    "3"   
 "5"    "6"    "7"