r - R使用它们的值对标题进行排序
问题描述
我有一个按一天中的时间计算的频率数据:
my.data <- read.table(text = '
0 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 3 4 6 7 8 9
5 3 3 7 10 11 13 17 18 14 8 4 2 2 1 4 1 1 3 7 8 11 8
', header = TRUE, stringsAsFactors = FALSE, na.strings = 'NA')
值 0 表示中午 12:00 至凌晨 1:00,1 表示凌晨 1:00 至凌晨 2:00。我们可以看到标题是随机排序的,并且有一些缺失值(在本例中为 5)。我希望 R 对标题进行升序排序。下一步是找到缺失值(如[1,2,3,6,7],缺少4和5个时间段),然后将NA值替换为0。
有没有简单的方法来完成这个?非常感激!
解决方案
因为 R 仔细X
地为每个列名添加了前缀(因为它不喜欢以数字开头的列名),所以我们需要知道如何删除它们:
gsub("X", "", colnames(my.data))
# [1] "0" "1" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "2" "20" "21"
# [16] "22" "23" "3" "4" "6" "7" "8" "9"
(如果您使用read.table(..., check.names=FALSE)
,那么列名将是原始数字,不需要该gsub
步骤。)这样,我们只想根据这些字符串的整数化来更改顺序。
my.data[ order(as.integer(gsub("X", "", colnames(my.data)))) ]
# X0 X1 X2 X3 X4 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23
# 1 5 3 2 1 3 7 8 11 8 3 7 10 11 13 17 18 14 8 4 2 1 4 1
因此
my.data[ colnames(my.data)[ order(as.integer(gsub("X", "", colnames(my.data)))) ] ]
# X0 X1 X2 X3 X4 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23
# 1 5 3 2 1 3 7 8 11 8 3 7 10 11 13 17 18 14 8 4 2 1 4 1
如果您能够在读入时更改标题,则:
my.data <- read.table(text = '
0 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 3 4 6 7 8 9
5 3 3 7 10 11 13 17 18 14 8 4 2 2 1 4 1 1 3 7 8 11 8
', header = TRUE, stringsAsFactors = FALSE, na.strings = 'NA', check.names=FALSE)
my.data
# 0 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 3 4 6 7 8 9
# 1 5 3 3 7 10 11 13 17 18 14 8 4 2 2 1 4 1 1 3 7 8 11 8
my.data[ order(as.integer(colnames(my.data))) ]
# 0 1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 1 5 3 2 1 3 7 8 11 8 3 7 10 11 13 17 18 14 8 4 2 1 4 1
(我们仍然需要as.integer
,因为列名总是返回为character
.)
推荐阅读
- python - Seaborn 热图在图像上,但没有显示任何内容
- c - MPI_Bcast 进入 while 循环
- python - cv2.Imshow() 在不同图像上显示相同的通道颜色
- javascript - 如何转换无限数(例如 6.983333)以获得准确的时间(例如 6:59:00)而不会在 javascript 中丢失任何时间
- google-apps-script - 突然 moveActiveSheet 返回错误 - Google Apps 脚本
- sql - 使用 CASE 语句仅在列中显示某些结果(也创建重复项)
- node.js - 使用 reactjs 和 nodejs 重定向不起作用
- c# - 如何使用 .NETCore 在 2 个不同项目之间覆盖 appsettings.json 文件中的值
- sql-server - 从 ValidationDate 列中检索行
- python - 无效的选择器:xpath 表达式“//*[@id='topstuff']/div/div/p[1]/text()[2]”的结果是:[object Text] using XPath and Selenium