Подмножество данных в R не работает через вектор - PullRequest
1 голос
/ 20 октября 2019

Scanario.

На курсах обработки данных очистка данных с помощью R: тематические исследования. В крайнем конце курса есть упражнение, где у нас есть 5 столбцов (скажем, 1,2,3,4,5) набора данных "att5". Только столбец 1 является символом и содержит символы, но в 2: 5 есть числа, но это тип (символы). Они говорят мне, чтобы я создал вектор cols, состоящий из векторов, имеющих индексы (2,3,4,5), и использовал sapply для использования в качестве функции as.numeric.

Мое решение не работает, хотя онопридать смысла. Сначала я делюсь своими решениями, а потом своими решениями. Пожалуйста, помогите мне понять, что происходит.

Решение Data Camp (работает)

# Define vector containing numerical columns: cols
cols <- -1

# Use sapply to coerce cols to numeric
att5[, cols] <- sapply(att5[, cols], as.numeric)

Мое решение (не работает)

# Define vector containing numerical columns: cols
cols <- c(2:5)

# Use sapply to coerce cols to numeric
att5[, cols] <- sapply(att5[, cols], as.numeric)

Я получаю эту ошибку: список недействительных типов индексов

Помогите мне понять. Новичок в Р.

1 Ответ

0 голосов
/ 20 октября 2019

Ваше решение отлично работает на моей машине. Единственное отличие, которое я могу видеть, это cols <- -1 класса "numeric", где cols <- c(2:5) равно [1] "integer". Если вы хотите узнать разницу между ними, посмотрите В чем разница между целочисленным классом и числовым классом в R .

Таким образом, один из способов обратного инжиниринга их решения заключается в создании cols в numeric классе, и seq может помочь в этом.

cols <- seq(2,5,1)
#class(cols)
#[1] "numeric"
att5[, cols] <- sapply(att5[, cols], as.numeric)
# str(att5)
# 'data.frame': 5 obs. of  5 variables:
# $ att1: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
# $ att2: num  1 2 3 4 5
# $ att3: num  1 2 3 4 5
# $ att4: num  1 2 3 4 5
# $ att5: num  1 2 3 4 5

Данные

dput(att5)
att5 <- structure(list(att1 = structure(1:5, .Label = c("A", "B", "C", 
"D", "E"), class = "factor"), att2 = structure(1:5, .Label = c("1", 
"2", "3", "4", "5"), class = "factor"), att3 = structure(1:5, .Label = c("1", 
"2", "3", "4", "5"), class = "factor"), att4 = structure(1:5, .Label = c("1", 
"2", "3", "4", "5"), class = "factor"), att5 = structure(1:5, .Label = c("1", 
"2", "3", "4", "5"), class = "factor")), class = "data.frame", row.names = c(NA, 
-5L))

Надеюсь, это сработает с вашей стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...