Использование функции расплава и получение ошибки: имена не соответствуют предыдущим именам [дубликат]

Главный ответ отличный. Вот что я должен был на обычной установке debian / php / mysql:

// storage
// debian. apparently already utf-8

// retrieval
// the mysql database was stored in utf-8, 
// but apparently php was requesting iso. this worked: 
// ***notice "utf8", without dash, this is a mysql encoding***
mysql_set_charset('utf8');

// delivery
// php.ini did not have a default charset, 
// (it was commented out, shared host) and
// no http encoding was specified in the apache headers.
// this made apache send out a utf-8 header
// (and perhaps made php actually send out utf-8)
// ***notice "utf-8", with dash, this is a php encoding***
ini_set('default_charset','utf-8');

// submission
// this worked in all major browsers once apache
// was sending out the utf-8 header. i didnt add
// the accept-charset attribute.

// processing
// changed a few commands in php, like substr,
// to mb_substr

, которая была всем!

11
задан Claudia 5 June 2013 в 15:05
поделиться

2 ответа

Это работает для меня. Я сделал следующее.

library(reshape2)
tableMS <- read.table(text='     X   Y        Z        T
1  375 855 455.7259 3777.856
2  395 969 347.8306   2506.7
3  449 811 309.9512 519.8513
4  451 774  278.291 717.8705
5  453 774  278.291 717.8705
6  455 774  278.291 717.8705
7  521 697  376.734 693.8541
8  529 855 455.7259 3777.856
9  531 855 455.7259 3777.856
10 609 774  278.291 717.8705',header=TRUE)

EDIT Это все еще работает, даже если вы принуждаете Z и T к списку.

tableMS$Z <- as.list(tableMS$Z)
tableMS$T <- as.list(tableMS$T)


MeltTable <- melt(tableMS,id=c("X","Y"))
# MeltTable
# X   Y variable     value
# 1  375 855        Z  455.7259
# 2  395 969        Z  347.8306
# 3  449 811        Z  309.9512
# 4  451 774        Z  278.2910
# 5  453 774        Z  278.2910
# 6  455 774        Z  278.2910
# 7  521 697        Z  376.7340
# 8  529 855        Z  455.7259
# 9  531 855        Z  455.7259
# 10 609 774        Z  278.2910
# 11 375 855        T 3777.8560
# 12 395 969        T 2506.7000
# 13 449 811        T  519.8513
# 14 451 774        T  717.8705
# 15 453 774        T  717.8705
# 16 455 774        T  717.8705
# 17 521 697        T  693.8541
# 18 529 855        T 3777.8560
# 19 531 855        T 3777.8560
# 20 609 774        T  717.8705

edit не работают с версией reshape2 1.4.2

Обходным путем является использование пакета data.table. BTW это решение быстрее.

library(data.table)
tableMS$Z <- as.vector(as.list(tableMS$Z))
tableMS$T <- as.vector(as.list(tableMS$T))
setDT(tableMS)
melt(tableMS,id=c("X","Y"))
3
ответ дан Uwe 26 August 2018 в 08:21
поделиться

У меня была такая же проблема, но причина была другая. Я получил то же сообщение об ошибке «имена не соответствуют предыдущим именам», но это было связано с использованием пакета dplyr.

Оказывается, это известная проблема с dplyr . Согласно проблеме GitHub, это произойдет в некоторой версии dplyr и изменит форму, но не на других.

Результат от dplyr - это не просто data.frame - он наследуется от data.frame. Поэтому после использования dplyr для создания data это результат:

class(data)

> [1] "tbl_df"     "tbl"        "data.frame"

melt(data, id = c("X", Y"))

>Error in match.names(clabs, names(xi)) : 
names do not match previous names

Чтобы исправить эту проблему, мне пришлось преобразовать вывод dplyr в фрейм данных. Это также представляется рекомендуемым способом объединения этих пакетов:

data <- as.data.frame(data)
class(data)

> [1] "data.frame"

melt(data, id = c("X", "Y"))

Последний блок завершается без ошибок.

29
ответ дан Alex A. 26 August 2018 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: