根据R列中的代码对数据进行排序

根据R列中的代码对数据进行排序,r,sorting,transpose,R,Sorting,Transpose,我有一个有两列的文件。一个带5位代码,一个带计数。 下面是一个有3位数字的示例: Code Count 101 1254 103 1566 221 459 213 698 现在,我想对数据进行转置,以便在从最后一位开始的代码之后对其进行排序: 10x 11x 12x 13x 14x .... 19x 20x 21x 22x 23x xx1 1254 459 xx2

我有一个有两列的文件。一个带5位代码,一个带计数。 下面是一个有3位数字的示例:

Code    Count
101   1254
103   1566
221   459
213   698
现在,我想对数据进行转置,以便在从最后一位开始的代码之后对其进行排序:

        10x   11x 12x 13x 14x .... 19x  20x 21x 22x 23x 
xx1   1254                                      459
xx2             
xx3   1566                                  698

非常感谢您的帮助。

根据您的示例,您可以这样做:

df$code_2 <- substr(df$Code, 1, 2)
df$code_1 <- substring(df$Code, 3)
然后
dcast

library(reshape2)
dcast(df, code_1 ~ code2, value.var = 'Count')

  code_1   10  21  22
1      1 1254  NA 459
2      3 1566 698  NA
要正确设置格式,请执行以下操作:

rownames(df2) <- paste0('xx', df2$code_1)
df2$code_1 <- NULL
names(df2) <- paste0(names(df2), 'x')

或者,您可以执行以下操作:

# create a sample dataset
data <- data.frame(Code = c(101,103,221,213), Count = c(1254,1566,459,698))

# extract code start and end
start <- sort(unique(substr(data$Code, 1,2)))
end <- sort(unique(substr(data$Code, 3,3)))

# create placeholder dataframe
data2 <- sapply(start, paste0, end)
# where code not in original dataset, write NA
data2[!sapply(c(data2), '%in%', data$Code)] <- NA
# else write the appropriate count
data2[sapply(c(data2), '%in%', data$Code)] <- data$Count[order(data$Code)]
# change column and row names
colnames(data2) <- paste0(start, "x")
rownames(data2) <- paste0("xx", end)
#创建示例数据集
数据
df2
     10x 21x 22x
xx1 1254  NA 459
xx3 1566 698  NA
# create a sample dataset
data <- data.frame(Code = c(101,103,221,213), Count = c(1254,1566,459,698))

# extract code start and end
start <- sort(unique(substr(data$Code, 1,2)))
end <- sort(unique(substr(data$Code, 3,3)))

# create placeholder dataframe
data2 <- sapply(start, paste0, end)
# where code not in original dataset, write NA
data2[!sapply(c(data2), '%in%', data$Code)] <- NA
# else write the appropriate count
data2[sapply(c(data2), '%in%', data$Code)] <- data$Count[order(data$Code)]
# change column and row names
colnames(data2) <- paste0(start, "x")
rownames(data2) <- paste0("xx", end)