将R数据框导出到文本文件,同时定义每列允许的字符数和间距

iyr7buue  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(119)

我有下面的数据框架。

c1 <- c("Stop", "Go", "Stop", "Go", "Go")
c2 <- c(300,6,800000,20,7000)
df <- data.frame(c1, c2)

我一直在尝试使用write.table()将此数据框导出为文本文件,如下所示。

write.table(df, file = "test", 
            quote = FALSE, 
            col.names = FALSE,
            row.names = FALSE)

我想定义每个列的每个元素中存在多少个字符,以便在文本文件中得到以下输出。

#Stop    300
#Go        6
#Stop 800000
#Go       20
#Go     7000

其中,第1列中的每个值有4个字符,第2列中的每个元素有6个字符,并由一个空格分隔。例如,数据框中的值6是一个字符串,6前有5个空格。第1列中的字符左对齐,空格后对齐,第2列中的字符左对齐,空格前对齐。如何做到这一点?哪些函数可能有用?

gcuhipw9

gcuhipw91#

format()使用width参数输入数据。默认情况下,左填充数字向量,右填充字符向量。这里的宽度设置为每列的最大字符数。

write.table(
  lapply(df, \(x) format(x, width = max(nchar(x)), scientific = FALSE)),
  file = "test.txt", 
  quote = FALSE,
  col.names = FALSE,
  row.names = FALSE)

产生:

Stop    300
Go        6
Stop 800000
Go       20
Go     7000
i7uq4tfw

i7uq4tfw2#

这里有一个方法:

df$c2 <- format(df$c2, scientific = FALSE)
n <- sapply(df, function(x) 6-nchar(x))

df2 <- df
for(j in seq_len(ncol(n))){
  for(i in seq_len(nrow(n))){
    df2[i,j] <- paste0(df2[i,j], paste0(rep(" ", n[i,j]), collapse = ""))
  }
}

write.table(df2, file = "test.txt", 
            quote = FALSE, 
            col.names = FALSE,
            row.names = FALSE)

从txt文件输出

Stop      300
Go          6
Stop   800000
Go         20
Go       7000

相关问题