r - 在行名前写有空格的表
问题描述
我有一个数据框,它写入顶部带有标题名称的表。这是一些可重现的代码。
library(gdata)
df = as.list(c(1:100))
df = unlist(df)
dim(df) = c(length(df)/5, 5)
array_name = as.data.frame(c("Data:"))
write.fwf(array_name,'new_file.txt',append=T,sep=" ",colnames=F,rownames=F,quote=F)
write.fwf(df,'new_file.txt',append=T,sep=" ",colnames=F,rownames=F,quote=F)
这是输出...
Data:
1 21 41 61 81
2 22 42 62 82
3 23 43 63 83
4 24 44 64 84
5 25 45 65 85
6 26 46 66 86
7 27 47 67 87
8 28 48 68 88
9 29 49 69 89
10 30 50 70 90
11 31 51 71 91
12 32 52 72 92
13 33 53 73 93
14 34 54 74 94
15 35 55 75 95
16 36 56 76 96
17 37 57 77 97
18 38 58 78 98
19 39 59 79 99
20 40 60 80 100
我怎样才能让它看起来像这样......
Data:
0: 1 21 41 61 81
5: 2 22 42 62 82
10: 3 23 43 63 83
15: 4 24 44 64 84
20: 5 25 45 65 85
25: 6 26 46 66 86
30: 7 27 47 67 87
35: 8 28 48 68 88
40: 9 29 49 69 89
45: 10 30 50 70 90
50: 11 31 51 71 91
55: 12 32 52 72 92
60: 13 33 53 73 93
65: 14 34 54 74 94
70: 15 35 55 75 95
75: 16 36 56 76 96
80: 17 37 57 77 97
85: 18 38 58 78 98
90: 19 39 59 79 99
100: 20 40 60 80 100
所以,基本上我想:
1)添加以5为间隔的行名列。
2)使每一列在右边对齐。
3)将所有内容移到标题名称的右侧(与最后一行的第一个数字对齐 - 即“100”。
编辑/解决方案:
这就是我为解决问题所做的。我将“df”替换为“G”,因为这是我用于脚本的变量。
array_name <- as.data.frame(c("G:"))
G <- as.list(t(dflist2$`1`[2][!dflist2$`1`[2] == ""]))
G <- unlist(G)
dim(G) <- c(length(G)/5, 5)
G <- as.data.frame(G)
G <- cbind(row = 0, G)
for (x in 1:nrow(G)) {
if (row.names(G[x,]) == "1") {G[x,"row"] = 0
} else {G[x,"row"] = G[x-1,"row"]+5}
}
row.names(G) <- sprintf(" %i:", G$row)
G <- G[,-1]
write.fwf(array_name, 'new_file.txt', append = TRUE, sep = "",
colnames = FALSE, rownames = FALSE, quote = FALSE)
write.fwf(G,'new_file.txt',append=TRUE,sep=" ",
colnames=FALSE,rownames=TRUE,quote=FALSE)
解决方案
你真的需要花一些时间学习一两个 R 教程。您的代码中有很多冗余(创建一个列表然后将其取消列出)。我假设您并不是要在 90 和 100 之间降低 95,所以我从 5 而不是 0 开始:
df <- as.data.frame(matrix(1:100, 20, 5))
array_name <- "Data:"
writeLines(array_name, "new_file.txt")
row.names(df) <- sprintf("%8d:", seq(0, 95, by=5))
write.fwf(df, 'new_file.txt', append=TRUE ,sep=" ", colnames=FALSE,
rownames=TRUE, quote=FALSE)
其中一些只是很好的做法,例如使用 <- 而不是 = 使您的代码更易于阅读。使用FALSE
而不是 F.FALSE
是保留字,不能重新分配。F 是可以重新分配的缩写。如果您在代码中的某处不小心将变量 F 分配给 0 以外的任何值,则您的代码已损坏。
推荐阅读
- mysql - 如何在 SQL Select 语句中填写缺失的日期字符串?
- python - Python Conda Environment confusion(as example: problem with gym)
- java - 流 - 过滤器中的 anyMatch 产生 IllegalStateException
- ms-access - 如何使用查询计算访问中表中列的运行总计?
- ios - 如何像 medium.com 一样在 uitextview 中本地呈现内容?
- javascript - 如何让反应组件位于另一个组件之上
- reactjs - React.js 中的过滤
- c# - Razor Pages:从页面获取字符串列表到页面模型中
- python - 如何在 python 中验证用户输入?
- tensorflow - 如何将大浮点数保存为 TFRecord 格式?float_list/float32 似乎截断了值