我有一个数据框,其中包含多行,格式为
41,25
25,41
23,41
41,23
我只想要不同的对,顺序无关紧要。 因此,例如,数据框应该是这样的
41,25
41,25
41,23
41,23
所以我可以计算41和25组合发生的次数。
因此,我希望遍历整个数据框并对每个字符串进行排序,以便最高值排在第一位。(或者最低值,无所谓)。
希望你能帮忙。我猜这很简单,但无法理解。
由于
答案 0 :(得分:3)
如果d
是您的data.frame
且对是一列中的字符串,那么
d[, 1] <- sapply(strsplit(d[, 1], ','), function(x) paste(sort(x), collapse=','))
如果对在两列之间分开,比如第1列和第2列,则
d[, 1:2] <- t(apply(apply(d[, 1:2], 1, identity), 2, sort))
答案 1 :(得分:0)
当看到@Matthew Plourde的光滑编码时,这可能会令人尴尬,但我认为你不想删除重复的行,所以这是我提出的解决方案:
#Make some data
set.seed(1)
N <- 200
MIN <- 1
MAX <- 8
df <- data.frame(x=paste(round(runif(N, min=MIN, max=MAX)), round(runif(N, min=MIN, max=MAX)), sep=","))
#Split data into 2 components
require(plyr)
tmp <- ldply(strsplit(as.character(df$x), ","))
df$x1 <- as.numeric(tmp[,1])
df$x2 <- as.numeric(tmp[,2])
head(df)
#sort smaller of values to the left
tmp <- t(apply(df[,2:3], 1, sort))
df$x.sort <- apply(tmp, 1, paste, collapse=",")
head(df)
#sort df
ord <- order(df$x.sort)
df <- df[ord,]
head(df, 20)
结果是:
x x1 x2 x.sort
167 1,1 1 1 1,1
92 1,2 1 2 1,2
27 1,3 1 3 1,3
71 3,1 3 1 1,3
28 4,1 4 1 1,4
47 1,4 1 4 1,4
55 1,4 1 4 1,4
67 4,1 4 1 1,4
81 4,1 4 1 1,4
116 1,4 1 4 1,4
133 1,4 1 4 1,4
152 5,1 5 1 1,5
10 1,6 1 6 1,6
85 6,1 6 1 1,6
99 7,1 7 1 1,7
109 7,1 7 1 1,7
5 2,2 2 2 2,2
12 2,2 2 2 2,2
22 2,2 2 2 2,2
56 2,2 2 2 2,2