我有以下从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
答案 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.table
和splitstackshape
软件包来一步实现-
> 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