#r #dataframe
#r #фрейм данных
Вопрос:
У меня есть такой фрейм данных:
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
8 10 0.2 0.4 0 0.0 1.2 0.2 4.2 3.4 2.5
4 5 1.0 0 2 4.5 0 1.1 0 1 2.0
.....................................
т. е. столбцы из V2-V11 имеют некоторые десятичные значения. Что я хочу сделать, так это то, что все они в нескольких строках (2000) преобразуются в целые числа.
Я попытался использовать
apply(df, 1, as.integer())
Но это не работает.
Комментарии:
1. Сказать » это не сработало » редко бывает полезно. В этом случае сообщение об ошибке было бы информативным (вместо того, чтобы люди предполагали, что вы получили нежелательный результат).
'as.integer()' is not a function, character or symbol
. Вы имели в видуapply( df , 1 , as.integer )
. Они()
используются в командной строке, поэтому анализатор понимает, что он вызывает функцию. Нет необходимости сопоставлять функцию с именем, заданным в качестве аргумента другой функции.
Ответ №1:
Вы также можете создать класс
setClass("NumerictoInteger")
setAs("character", "NumerictoInteger", function(from) as.integer(from))
dat <- read.table(text="V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
8 10 0.2 0.4 0 0.0 1.2 0.2 4.2 3.4 2.5
4 5 1.0 0 2 4.5 0 1.1 0 1 2.0",sep="",header=T,stringsAsFactors=FALSE,colClasses="NumerictoInteger")
dat
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
1 8 10 0 0 0 0 1 0 4 3 2
2 4 5 1 0 2 4 0 1 0 1 2
Ответ №2:
Из документации he R для as.integer
:
Нецелые числовые значения усекаются до нуля (т.Е., Поскольку.integer(x) там равно trunc(x)), а мнимые части комплексных чисел отбрасываются (с предупреждением).
Похоже, мы можем использовать только trunc
здесь.
> trunc(df)
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
# 1 8 10 0 0 0 0 1 0 4 3 2
# 2 4 5 1 0 2 4 0 1 0 1 2
Комментарии:
1. Однако, если я вижу размеры, в моем фрейме данных было 7357 строк в 27 столбцах. Однако после того, как я применю это, результатом будет большая матрица с 198639 элементами. Почему это так?
2. После того , как ты позвонишь
floor()
? Илиsapply()
? Я удалилsapply()
3. Я использовала sapply и применяю и то, и другое. Оба ведут к этой матрице.
4. Он прекрасно работает с полом. Однако нет, с помощью apply и sapply это приводит к формированию матрицы с разными размерами, имеющей 198639 элементов
5. Не используйте
apply
, это приведет к принудительному преобразованию в матрицу, которую вам придется преобразовать обратно.floor
должен быть метод дляdata.frame
s, так как он сохраняет структуру нетронутой.