2016-07-23 1 views
2

После этого question У меня есть новый вызов. Например, если у меня есть этот Dataset:Преобразование строки в числовое - все данные были заменены, когда есть только по коэффициенту?

structure(list(particles = structure(c(1L, 3L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 6L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 4L, 4L, 
4L, 3L, 3L, 3L, 3L, 5L, 6L, 5L, 3L, 3L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L), .Label = c("1", "11", "1.1", "2", "2.1", "3.1" 
), class = "factor"), date = structure(c(1468833354.929, 1468833365.186, 
1468833378.458, 1468833538.213, 1468833538.416, 1468833538.613, 
1468833538.81, 1468833538.986, 1468833539.172, 1468833539.358, 
1468833539.539, 1468833554.592, 1468833559.059, 1468833562.357, 
1468833566.225, 1468833573.486, 1468840019.118, 1468840024.95, 
1469029568.849, 1469029584.243, 1469029590.53, 1469029622.391, 
1469029623.598, 1469245154.003, 1469245156.533, 1469245156.815, 
1469245157.123, 1469245162.358, 1469245165.911, 1469245170.178, 
1469245173.788, 1469261432.914, 1469261438.894, 1469261445.18, 
1469261447.552, 1469261447.758, 1469261447.967, 1469261448.156, 
1469261448.366, 1469261448.583, 1469261448.837, 1469261449.08, 
1469261454.697, 1469261458.774, 1469261458.988, 1469261459.312, 
1469261466.822, 1469261470.314, 1469261472.048, 1469261472.256, 
1469261472.461, 1469261472.84, 1469261473.013, 1469261473.207, 
1469261473.379, 1469261473.566, 1469261473.761, 1469261473.951 
), class = c("POSIXct", "POSIXt"), tzone = "Asia/Kuala_Lumpur")), .Names = c("particles", 
"date"), row.names = c(NA, -58L), class = "data.frame") 

Преобразовать все столбцы в numnberic:

vec <- sapply(data, is.factor) 
data[, vec] <- lapply(data[, vec], function(x) as.numeric(as.character(x))) 

Предупреждение:

Warning message: 
In `[<-.data.frame`(`*tmp*`, , vec, value = list(1, 1.1, 2.1, 2.1, : 
    provided 58 variables to replace 1 variables 

данные теперь стали:

structure(list(particles = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1), date = structure(c(1468833354.929, 1468833365.186, 
1468833378.458, 1468833538.213, 1468833538.416, 1468833538.613, 
1468833538.81, 1468833538.986, 1468833539.172, 1468833539.358, 
1468833539.539, 1468833554.592, 1468833559.059, 1468833562.357, 
1468833566.225, 1468833573.486, 1468840019.118, 1468840024.95, 
1469029568.849, 1469029584.243, 1469029590.53, 1469029622.391, 
1469029623.598, 1469245154.003, 1469245156.533, 1469245156.815, 
1469245157.123, 1469245162.358, 1469245165.911, 1469245170.178, 
1469245173.788, 1469261432.914, 1469261438.894, 1469261445.18, 
1469261447.552, 1469261447.758, 1469261447.967, 1469261448.156, 
1469261448.366, 1469261448.583, 1469261448.837, 1469261449.08, 
1469261454.697, 1469261458.774, 1469261458.988, 1469261459.312, 
1469261466.822, 1469261470.314, 1469261472.048, 1469261472.256, 
1469261472.461, 1469261472.84, 1469261473.013, 1469261473.207, 
1469261473.379, 1469261473.566, 1469261473.761, 1469261473.951 
), class = c("POSIXct", "POSIXt"), tzone = "Asia/Kuala_Lumpur")), .Names = c("particles", 
"date"), row.names = c(NA, -58L), class = "data.frame") 

Как вы можете видеть, все данные в колонка particles стала:

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1 

Что неправильно. Как я могу это исправить?

Почему он заменяет все данные на 1, когда это только один фактор столбцов для преобразования? Это нормально, когда у меня есть два или более столбцов для преобразования.

+7

Просто добавьте 'капля = false', например, 'lapply (data [, vec, drop = FALSE] ...', чтобы предотвратить принуждение R подмножества к вектору и обрабатывать его как data.frame. –

ответ

1

Используйте этот

data[vec] <- lapply(data[vec], function(x) as.numeric(as.character(x))) 
+1

yup, способ OP написал это применимо, вам нужно 'sapply 'не' lapply'. 'dat [, vec] <- sapply (dat [, vec], function (x) as.numeric (as.character (x)))' работает, но не так быстро работать кадры данных как векторы. – shayaa

Смежные вопросы