R - столбцы pipe (pbcopy), не выровненные при вставке

В ответ на вопрос , я, наконец, понял, как скопировать в буфер обмена, чтобы вставить в другие приложения (читай: Excel).

Однако при использовании функции копирования и вставки заголовки переменных столбцов не выравниваются правильно при вставке.

Данные (взятые из примера Flowing Data, на который я случайно посмотрел):

data <- read.csv("http://datasets.flowingdata.com/post-data.txt")

Функция копирования:

write.table(file = pipe("pbcopy"), data, sep = "\t")

При загрузке данные выглядят так:

    id  views comments               category
1 5019 148896       28 Artistic Visualization
2 1416  81374       26          Visualization
3 1416  81374       26               Featured
4 3485  80819       37               Featured
5 3485  80819       37                Mapping
6 3485  80819       37           Data Sources

Имеется номер строки без имени переменной столбца (1, 2, 3, 4,...)

Используя функцию read.table(pipe("pbpaste")), он снова загрузится в R в порядке.

Однако, когда я вставляю его в Excel или TextEdit, имя столбца для второй переменной будет в первом слоте имени столбца переменной, например:

id  views   comments    category    
1   5019    148896      28          Artistic Visualization
2   1416    81374       26          Visualization
3   1416    81374       26          Featured
4   3485    80819       37          Featured
5   3485    80819       37          Mapping
6   3485    80819       37          Data Sources 

Что оставляет конечный столбец без имени столбца.

Есть ли способ убедиться, что данные, скопированные в clipboard, правильно выровнены и помечены?


person mikebmassey    schedule 03.02.2012    source источник


Ответы (2)


Номера строк не имеют имени столбца в R data.frame. Их не было в исходном наборе данных, но они помещаются в вывод в буфер обмена, если вы не подавите его. По умолчанию для этой опции установлено значение TRUE, но вы можете переопределить его. Если вы хотите, чтобы такой столбец был именованным столбцом, вам нужно его сделать. Попробуйте это при отправке в excel.

df$rownums <- rownames(df)
edf <- df[ c( length(df), 1:(length(df)-1))]   # to get the rownums/rownames first
write.table(file = pipe("pbcopy"), edf, row.names=FALSE, sep = "\t")
person IRTFM    schedule 03.02.2012
comment
row.names=FALSE предоставил именно то, что я искал. Спасибо. - person mikebmassey; 03.02.2012

Вы можете просто добавить аргумент col.names=NA к вашему вызову write.table(). Это приводит к добавлению пустой строки символов (пустого имени столбца) в строку заголовка для первого столбца.

write.table(file = pipe("pbcopy"), data, sep = "\t", col.names=NA)

Чтобы увидеть разницу, сравните эти два вызова функций:

write.table(data[1:2,], sep="\t")
# "id"    "views" "comments"      "category"
# "1"     5019    148896  28      "Artistic Visualization"
# "2"     1416    81374   26      "Visualization"

write.table(data[1:2,], sep="\t", col.names=NA)
# ""      "id"    "views" "comments"      "category"
# "1"     5019    148896  28      "Artistic Visualization"
# "2"     1416    81374   26      "Visualization"
person Josh O'Brien    schedule 03.02.2012