在R中使用长字符串打印数据帧

在R中使用长字符串打印数据帧,r,dataframe,R,Dataframe,让我们在一列中创建一个具有长字符串的数据帧: df<-data.frame(short=rnorm(10,0,1),long=replicate(10,paste(rep(sample(letters),runif(1,5,8)),collapse=""))) 这是一种方式: within(df, { long = paste(substr(long, 1, 10), "...", sep = "") }) 我使用substr获取字符串的第一部分,而不是使用paste获取“…

让我们在一列中创建一个具有长字符串的数据帧:

 df<-data.frame(short=rnorm(10,0,1),long=replicate(10,paste(rep(sample(letters),runif(1,5,8)),collapse="")))
这是一种方式:

within(df, {
    long = paste(substr(long, 1, 10), "...", sep = "")
})
我使用substr获取字符串的第一部分,而不是使用paste获取“…”。要永久更改df中的字符,只需执行以下操作:

df = within(df, {
    long = paste(substr(long, 1, 10), "...", sep = "")
})

您可以重新定义
print.data.frame
方法,并在此函数中使用
substr
将字符向量修剪到所需的最大长度:

print.data.frame <- function (x, ..., maxchar=20, digits = NULL, quote = FALSE,
    right = TRUE, row.names = TRUE) 
{
  x <- as.data.frame(
      lapply(x, function(xx)
            if(is.character(xx)) substr(xx, 1, maxchar) else xx)
  )
  base::print.data.frame(x, ..., digits=digits, quote=quote, right=right, 
      row.names=row.names)
}
打印数据框:

print(df, maxchar=10)
        short       long
1  -0.6188273 cpfhnjmeiw
2  -0.0570548 bwcmpinedr
3  -0.5795637 dcevnyihlj
4   0.1977156 qzxlhvnarm
5  -1.9551196 aiflwtkjdq
6  -1.2429173 vlscerwhgq
7  -0.5897045 fziogkpsyr
8   0.4946985 pdeswloxcn
9   0.3262543 kxlofchszd
10 -1.8059621 wncaedpzty
使用并打印出原始数据帧的修改版本(无需更改)。仅缩短超过指定长度的值:

library(dplyr)

print.data.frame(df %>% mutate(long = ifelse(
    nchar(long > 11),
    paste0(substr(long, 1, 8), "..."),
    long
)))

感谢您提供了可复制的示例!
print(df, maxchar=10)
        short       long
1  -0.6188273 cpfhnjmeiw
2  -0.0570548 bwcmpinedr
3  -0.5795637 dcevnyihlj
4   0.1977156 qzxlhvnarm
5  -1.9551196 aiflwtkjdq
6  -1.2429173 vlscerwhgq
7  -0.5897045 fziogkpsyr
8   0.4946985 pdeswloxcn
9   0.3262543 kxlofchszd
10 -1.8059621 wncaedpzty
library(dplyr)

print.data.frame(df %>% mutate(long = ifelse(
    nchar(long > 11),
    paste0(substr(long, 1, 8), "..."),
    long
)))