在R中重新排序CSV文件的数据

时间:2019-04-11 16:01:55

标签: r

我有以下从CSV文件读取的数据集:

1   6.5
2   12
3   9
4   16.2
5   7.5
1   13
2   6
3   2.8
4   26
5   30

我想将第二组的数据(从13到30)移动为:

1   6.5   13
2   12    6
3   9     2.8
4   16.2  26
5   7.5   30

请注意,此数据将被写入CSV文件。

我该怎么做?我不知道如何用R

3 个答案:

答案 0 :(得分:1)

读取数据集后(从read.csv的{​​{1}}或base R的{​​{1}}到fread的{​​{1}}),创建一列列按'col1'分组后再命名,然后用'colN'data.table将'col2'分组

read_csv

数据

rowr

答案 1 :(得分:1)

一些“ hack”。您可以重新name,也可以删除row.names

df2<-df[duplicated(df$V1),]
df1<-df[!duplicated(df$V1),]
res<-cbind(df2,df1)
res[,c(2,ncol(res))]

结果:

     V2 V2.1
6  13.0  6.5
7   6.0 12.0
8   2.8  9.0
9  26.0 16.2
10 30.0  7.5

数据:

df<-read.table(text="1   6.5
2   12
               3   9
               4   16.2
               5   7.5
               1   13
               2   6
               3   2.8
               4   26
               5   30",header=F)

答案 2 :(得分:0)

您可以通过使用data.tablesplitstackshape软件包来一步实现-

> library(splitstackshape)
> library(data.table)
> cSplit(setDT(dt)[, list(text=paste(V2, collapse=',')), by = V1],"text")

   V1 text_1 text_2
1:  1    6.5   13.0
2:  2   12.0    6.0
3:  3    9.0    2.8
4:  4   16.2   26.0
5:  5    7.5   30.0

OR

另一个复杂的解决方案-

> dcast(dt, V1~V2 ,value.var="V2")
> data.table::as.data.table(t(apply( df, 1, function(x) c(x[!is.na(x)], x[is.na(x)]))))[,.(V1,`1_6.5`,`1_13`)]

       V1 1_6.5 1_13
    1:  1   6.5   13
    2:  2   6.0   12
    3:  3   2.8    9
    4:  4  16.2   26
    5:  5   7.5   30