我正在尝试对data.frame test
进行排序,以便每行按字母顺序排列。
> test
old new
32 Aju.dec Cli.pol
151 Kob.pyg Fes.spp
57 Aju.dec Cli.pol
170 Kob.pyg Kob.cer
当然,这可以完成several ways。
通过转置apply
t(apply(test, 1, sort))
[,1] [,2]
32 "Aju.dec" "Cli.pol"
151 "Fes.spp" "Kob.pyg"
57 "Aju.dec" "Cli.pol"
170 "Kob.cer" "Kob.pyg"
但是plyr::aaply
我得到一个数组
> plyr::aaply(test, 1, sort)
, , = old
new
old Cli.pol Fes.spp Kob.cer
Aju.dec "Aju.dec" NULL NULL
Kob.pyg NULL "Fes.spp" "Kob.cer"
, , = new
new
old Cli.pol Fes.spp Kob.cer
Aju.dec "Cli.pol" NULL NULL
Kob.pyg NULL "Kob.pyg" "Kob.pyg"
使用plyr::adply
我得到未分类的data.frame返回
plyr::adply(test, 1, sort)
old new
1 Aju.dec Cli.pol
2 Kob.pyg Fes.spp
3 Aju.dec Cli.pol
4 Kob.pyg Kob.cer
我可以使用apply
,但如果有人能解释我对plyr::aaply
和plyr::adply
的误解,我将不胜感激。如果有dplyr
解决方案,我会更高兴。
test <- structure(list(old = c("Aju.dec", "Kob.pyg", "Aju.dec", "Kob.pyg"
), new = c("Cli.pol", "Fes.spp", "Cli.pol", "Kob.cer")), .Names = c("old",
"new"), row.names = c(32L, 151L, 57L, 170L), class = "data.frame")
答案 0 :(得分:1)
我感觉adply无法“分解”数据帧的结构 - 即它按预期执行功能,但它不能在两列之间移动观察。您可以将data.frame转换为矩阵,然后它就可以工作。
您的语法在其他方面是正确的可以通过例如将order或rank函数应用于data.frame。
adply(as.matrix(test), 1, sort)