R:横向/水平排序

时间:2014-12-25 05:04:29

标签: r sorting

我有一个看起来像这样的表:

V1 V2 V3 V4
E
O  W  I
F  A  Z  C
S  D  K  L

我希望横跨/横向排序,以便它看起来像这样:

V1 V2 V3 V4
E
I  O  W
A  C  F  Z
D  K  L  S

我尝试使用sortorder,但我只能将其垂直排序或重新排序整列。是否可以水平排序单个行?

感谢。

注意:我没有看到我的问题和"按行排序数据"之间的相似之处。解决方案甚至不一样。

1 个答案:

答案 0 :(得分:2)

你可以尝试

df[] <- t(apply(df,1,function(x) c(sort(x[x!='']), x[x==''])))
df
#  V1 V2 V3 V4
#1  E         
#2  I  O  W   
#3  A  C  F  Z
#4  D  K  L  S

将缺少的元素改为NA而不是''

也可能更好
df[df==''] <- NA
df[] <- t(apply(df, 1, function(x) x[order(x)]))
df[is.na(df)] <- '' #if needed

数据

df <- structure(list(V1 = c("E", "O", "F", "S"), V2 = c("", "W", "A", 
"D"), V3 = c("", "I", "Z", "K"), V4 = c("", "", "C", "L")), .Names = c("V1", 
"V2", "V3", "V4"), class = "data.frame", row.names = c(NA, -4L))